Re: [Log4cplus-devel] Thread blocking when calling ev.gatherThreadSpecificData ();
Logging Framework for C++
Brought to you by:
wilx
|
From: Andersen, J. B. (E W EN R&D DT ES 2 1)
<jes...@si...> - 2014-03-14 13:09:38
|
Thread 1428 is the blocking thread.
When I click on the ::Queue::put_event in the calls stack Visual studio says that the next line in execution is: SemaphoreGuard semguard (sem);
Maybe it is just waiting for the sem??
1844 0 Worker Thread Win32 Thread log4cplus.dll!log4cplus::ConfigurationWatchDogThread::run Normal
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!log4cplus::ConfigurationWatchDogThread::run() Line 639
log4cplus.dll!log4cplus::thread::impl::ThreadStart::threadStartFuncWorker(void * arg) Line 216
log4cplus.dll!`anonymous namespace'::threadStartFunc(void * param) Line 185
11340 0 Worker Thread Win32 Thread log4cplus.dll!log4cplus::thread::Queue::get_events Normal
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!log4cplus::thread::Queue::get_events(std::deque<log4cplus::spi::InternalLoggingEvent,std::allocator<log4cplus::spi::InternalLoggingEvent> > * buf) Line 171
log4cplus.dll!log4cplus::`anonymous namespace'::QueueThread::run() Line 71
log4cplus.dll!log4cplus::thread::impl::ThreadStart::threadStartFuncWorker(void * arg) Line 216
log4cplus.dll!`anonymous namespace'::threadStartFunc(void * param) Line 185
5076 0 Worker Thread Win32 Thread log4cplus.dll!log4cplus::thread::Queue::get_events Normal
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!log4cplus::thread::Queue::get_events(std::deque<log4cplus::spi::InternalLoggingEvent,std::allocator<log4cplus::spi::InternalLoggingEvent> > * buf) Line 171
log4cplus.dll!log4cplus::`anonymous namespace'::QueueThread::run() Line 71
log4cplus.dll!log4cplus::thread::impl::ThreadStart::threadStartFuncWorker(void * arg) Line 216
log4cplus.dll!`anonymous namespace'::threadStartFunc(void * param) Line 185
10480 0 Worker Thread Win32 Thread log4cplus.dll!log4cplus::thread::Queue::get_events Normal
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!log4cplus::thread::Queue::get_events(std::deque<log4cplus::spi::InternalLoggingEvent,std::allocator<log4cplus::spi::InternalLoggingEvent> > * buf) Line 171
log4cplus.dll!log4cplus::`anonymous namespace'::QueueThread::run() Line 71
log4cplus.dll!log4cplus::thread::impl::ThreadStart::threadStartFuncWorker(void * arg) Line 216
log4cplus.dll!`anonymous namespace'::threadStartFunc(void * param) Line 185
7460 0 Worker Thread Win32 Thread log4cplus.dll!log4cplus::thread::Queue::get_events Normal
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!log4cplus::thread::Queue::get_events(std::deque<log4cplus::spi::InternalLoggingEvent,std::allocator<log4cplus::spi::InternalLoggingEvent> > * buf) Line 171
log4cplus.dll!log4cplus::`anonymous namespace'::QueueThread::run() Line 71
log4cplus.dll!log4cplus::thread::impl::ThreadStart::threadStartFuncWorker(void * arg) Line 216
log4cplus.dll!`anonymous namespace'::threadStartFunc(void * param) Line 185
9384 0 Worker Thread Win32 Thread log4cplus.dll!log4cplus::thread::Queue::get_events Normal
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!log4cplus::thread::Queue::get_events(std::deque<log4cplus::spi::InternalLoggingEvent,std::allocator<log4cplus::spi::InternalLoggingEvent> > * buf) Line 171
log4cplus.dll!log4cplus::`anonymous namespace'::QueueThread::run() Line 71
log4cplus.dll!log4cplus::thread::impl::ThreadStart::threadStartFuncWorker(void * arg) Line 216
log4cplus.dll!`anonymous namespace'::threadStartFunc(void * param) Line 185
1428 0 Worker Thread Win32 Thread log4cplus.dll!log4cplus::thread::Queue::put_event Time Critical
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!log4cplus::thread::Queue::put_event(const log4cplus::spi::InternalLoggingEvent & ev) Line 58
log4cplus.dll!log4cplus::AsyncAppender::append(const log4cplus::spi::InternalLoggingEvent & ev) Line 172
log4cplus.dll!log4cplus::Appender::doAppend(const log4cplus::spi::InternalLoggingEvent & event) Line 288
log4cplus.dll!log4cplus::spi::LoggerImpl::callAppenders(const log4cplus::spi::InternalLoggingEvent & event) Line 60
log4cplus.dll!log4cplus::detail::macro_forced_log(const log4cplus::Logger & logger, int log_level, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & msg, const char * filename, int line, const char * func) Line 86
MyApplication()
winmm.dll!745d3af0()
winmm.dll!745da535()
winmm.dll!745da434()
9928 0 Worker Thread Win32 Thread log4cplus.dll!std::basic_filebuf<char,std::char_traits<char> >::overflow Normal
ntdll.dll!7748fa12()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748fa12()
log4cplus.dll!std::basic_filebuf<char,std::char_traits<char> >::overflow(int _Meta) Line 336
log4cplus.dll!std::operator<<<char,std::char_traits<char>,std::allocator<char> >(std::basic_ostream<char,std::char_traits<char> > & _Ostr, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Str) Line 518
log4cplus.dll!log4cplus::pattern::PatternConverter::formatAndAppend(std::basic_ostream<char,std::char_traits<char> > & output, const log4cplus::spi::InternalLoggingEvent & event) Line 370
log4cplus.dll!log4cplus::PatternLayout::formatAndAppend(std::basic_ostream<char,std::char_traits<char> > & output, const log4cplus::spi::InternalLoggingEvent & event) Line 1109
log4cplus.dll!log4cplus::FileAppender::append(const log4cplus::spi::InternalLoggingEvent & event) Line 372
log4cplus.dll!log4cplus::RollingFileAppender::append(const log4cplus::spi::InternalLoggingEvent & event) Line 504
log4cplus.dll!log4cplus::Appender::doAppend(const log4cplus::spi::InternalLoggingEvent & event) Line 288
log4cplus.dll!log4cplus::`anonymous namespace'::QueueThread::run() Line 77
log4cplus.dll!log4cplus::thread::impl::ThreadStart::threadStartFuncWorker(void * arg) Line 216
log4cplus.dll!`anonymous namespace'::threadStartFunc(void * param) Line 185
3196 0 Worker Thread Win32 Thread log4cplus.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy Normal
ntdll.dll!7748f8c1()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7748f8c1()
log4cplus.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy(unsigned int _Newsize, unsigned int _Oldlen) Line 1932
ws2_32.dll!754b2f7d()
ntdll.dll!7748fd81()
ws2_32.dll!754b6958()
ws2_32.dll!754b68cd()
MyApplication()
kernel32.dll!76cc339a()
-----Original Message-----
From: Václav Zeman [mailto:vha...@gm...]
Sent: 14. marts 2014 13:48
To: Andersen, Jesper Behrens (E W EN R&D DT ES 2 1)
Cc: log...@li...
Subject: Re: [Log4cplus-devel] Thread blocking when calling ev.gatherThreadSpecificData ();
On 14 March 2014 13:43, Andersen, Jesper Behrens (E W EN R&D DT ES 2 1) wrote:
> Hi,
>
> Setup:
> log4cplus version 1.1.2.0.
> Compiled for Windows XP target platform
> Compiled using visual studio 2010 compiler as dynamic libraries.
> Logging is done from multiple threads.
>
> Loggers are configured with the AsyncAppender and a sub RollingFileAppender
> like this:
> ########################################################################
> ## log file configuration (to disable, remove it from the rootLogger) ##
> ##
> log4cplus.appender.IRlogfile=log4cplus::AsyncAppender
> log4cplus.appender.IRlogfile.QueueLimit=100
>
> log4cplus.appender.IRlogfile.Appender=log4cplus::RollingFileAppender
> log4cplus.appender.IRlogfile.Appender.layout=log4cplus::PatternLayout
> log4cplus.appender.IRlogfile.Appender.BufferSize=10000
> log4cplus.appender.IRlogfile.Appender.ImmediateFlush=true
> ##
> ## The name and location for the log file
> log4cplus.appender.IRlogfile.Appender.File=d:/IRCore.log.txt
> ##
> ## The frequency at which log files will be rotated
> log4cplus.appender.IRlogfile.Appender.DatePattern='.'yyyy-MM-dd
> ##
> ## The maximum size of log files before they are rotated
> log4cplus.appender.IRlogfile.Appender.MaxFileSize=10MB
> ##
> ## The number of backup log files to keep
> log4cplus.appender.IRlogfile.Appender.MaxBackupIndex=10
> ##
> ## pattern used for the log file
> log4cplus.appender.IRlogfile.Appender.layout.ConversionPattern=%D{%Y-%m-%d
> %H:%M:%S.%q};%c;%m%n
>
>
> I have experienced one of my threads blocked for aprox. 1500 ms.
> This triggered my watchdog thread to write a minidump file. This mini dump
> indicated that the blocking thread was located somewhere in the
> ev.gatherThreadSpecificData() method.
>
> Maybe my configuration is faulted?
>
> From the source I can see it must have been in one of the these methods the
> block occured:
>
> getNDC ();
> getMDCCopy ();
> getThread ();
> getThread2 ();
>
> Can anybody see / explain why a block can occur?
I have no explanation. Could you post the tail of the thread stack?
--
VZ
|