digitalmars.D.learn - Need some help about error that I don't understand
In my custom multithreaded web-server (non vibe-based) I got error that is strange for me. I've was looking for a reason running app under GDB, but I don't understand how to interpret what I've got. It's interesting that it fails (without any error or segfault message) in the case when null reference to class object passed into static method of class. When it's not null all goes well. So there is backtrace: //--------------- (gdb) thread apply all bt Thread 4 (Thread 0x7ffff1cb1700 (LWP 30869)): ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85 std.array.__T14arrayAllocImplVbi0TAhTmZ.arrayAllocImpl() () std.array.__T18uninitializedArrayTAhTymZ.uninitializedArray() () mkk_site.uri_page_router.MKK_Site_URIPageRouter.renderMessageBody() () mkk_site.uri_page_router.MKK_Site_URIPageRouter.customProcessRequest() () webtank.net.http.handler.EventBasedHTTPHandler.processRequest() () webtank.net.http.handler.HTTPRouter.customProcessRequest() () webtank.net.http.handler.EventBasedHTTPHandler.processRequest() () webtank.net.web_server.WorkingThread._work() () pthread_create.c:312 ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Thread 3 (Thread 0x7ffff24b2700 (LWP 30860)): ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135 /lib/x86_64-linux-gnu/libpthread.so.0 (mutex=0xac58a0 <gc.gc.GC.mutexStorage()+16>) at ../nptl/pthread_mutex_lock.c:114 std.array.__T14arrayAllocImplVbi0TAaTmZ.arrayAllocImpl() () std.array.__T18uninitializedArrayTAaTmZ.uninitializedArray() () std.array.__T5arrayTS3std4conv47__T7toCharsVii10TaVE3std5ascii10LetterCasei1TmZ7toCharsFNaNbNi fmZ6ResultZ.array() () std.array.__T5arrayTS3std4conv47__T7toCharsVii10TaVE3std5ascii10LetterCasei1TmZ7toCharsFNaNbNi fmZ6ResultZ.array() () webtank.common.logger.FileLogger.writeEvent() () webtank.common.logger.ThreadedLogger._run() () std.concurrency.Message.__T3mapTDFS7webtank6common6logger8LogEventZvZ.map() () std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.__T7receiveTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15OwnerTer inatedZvZ.receive() () webtank.common.logger.ThreadedLogger._run() () std.concurrency.__T6_spawnTPFS3std11concurrency3TidOC7webtank6common6logger6LoggerZvTS3std11concurrency3TidTOC7webtank6common6log er6LoggerZ._spawn() () ---Type <return> to continue, or q <return> to quit--- pthread_create.c:312 ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Thread 2 (Thread 0x7ffff2cb3700 (LWP 30859)): ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.__T7receiveTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15OwnerTer inatedZvZ.receive() () webtank.common.logger.ThreadedLogger._run() () std.concurrency.__T6_spawnTPFS3std11concurrency3TidOC7webtank6common6logger6LoggerZvTS3std11concurrency3TidTOC7webtank6common6log er6LoggerZ._spawn() () pthread_create.c:312 ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Thread 1 (Thread 0x7ffff7fbd980 (LWP 30855)): ../sysdeps/unix/syscall-template.S:81 webtank.net.web_server.WebServer.start() () (gdb) //--------------- In my app I have loger thread that receive messages through std.concurrency.receive and writes them into file. Could it be the source of problems?
Feb 05 2016
On Friday, 5 February 2016 at 17:39:55 UTC, Uranuz wrote:In my custom multithreaded web-server (non vibe-based) I got error that is strange for me. I've was looking for a reason running app under GDB, but I don't understand how to interpret what I've got. It's interesting that it fails (without any error or segfault message) in the case when null reference to class object passed into static method of class. When it's not null all goes well. So there is backtrace: //--------------- (gdb) thread apply all bt Thread 4 (Thread 0x7ffff1cb1700 (LWP 30869)): ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85 std.array.__T14arrayAllocImplVbi0TAhTmZ.arrayAllocImpl() () std.array.__T18uninitializedArrayTAhTymZ.uninitializedArray() () mkk_site.uri_page_router.MKK_Site_URIPageRouter.renderMessageBody() () mkk_site.uri_page_router.MKK_Site_URIPageRouter.customProcessRequest() () webtank.net.http.handler.EventBasedHTTPHandler.processRequest() () webtank.net.http.handler.HTTPRouter.customProcessRequest() () webtank.net.http.handler.EventBasedHTTPHandler.processRequest() () webtank.net.web_server.WorkingThread._work() () pthread_create.c:312 ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Thread 3 (Thread 0x7ffff24b2700 (LWP 30860)): ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135 /lib/x86_64-linux-gnu/libpthread.so.0 (mutex=0xac58a0 <gc.gc.GC.mutexStorage()+16>) at ../nptl/pthread_mutex_lock.c:114 () std.array.__T14arrayAllocImplVbi0TAaTmZ.arrayAllocImpl() () std.array.__T18uninitializedArrayTAaTmZ.uninitializedArray() () std.array.__T5arrayTS3std4conv47__T7toCharsVii10TaVE3std5ascii10LetterCasei1TmZ7toCharsFNaNbNi fmZ6ResultZ.array() () std.array.__T5arrayTS3std4conv47__T7toCharsVii10TaVE3std5ascii10LetterCasei1TmZ7toCharsFNaNbNi fmZ6ResultZ.array() () webtank.common.logger.FileLogger.writeEvent() () webtank.common.logger.ThreadedLogger._run() () std.concurrency.Message.__T3mapTDFS7webtank6common6logger8LogEventZvZ.map() () std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.__T7receiveTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15OwnerTer inatedZvZ.receive() () webtank.common.logger.ThreadedLogger._run() () std.concurrency.__T6_spawnTPFS3std11concurrency3TidOC7webtank6common6logger6LoggerZvTS3std11concurrency3TidTOC7webtank6common6log er6LoggerZ._spawn() () ---Type <return> to continue, or q <return> to quit--- pthread_create.c:312 ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Thread 2 (Thread 0x7ffff2cb3700 (LWP 30859)): ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 () std.concurrency.MessageBox.__T3getTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15Owne TerminatedZvZ.get() () std.concurrency.__T7receiveTDFS7webtank6common6logger8LogEventZvTDFNaNbNiNfS7webtank6common6logger14ThreadedLogger10LogStopMsgZvTDFC3std11concurrency15OwnerTer inatedZvZ.receive() () webtank.common.logger.ThreadedLogger._run() () std.concurrency.__T6_spawnTPFS3std11concurrency3TidOC7webtank6common6logger6LoggerZvTS3std11concurrency3TidTOC7webtank6common6log er6LoggerZ._spawn() () pthread_create.c:312 ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Thread 1 (Thread 0x7ffff7fbd980 (LWP 30855)): ../sysdeps/unix/syscall-template.S:81 webtank.net.web_server.WebServer.start() () (gdb) //--------------- In my app I have loger thread that receive messages through std.concurrency.receive and writes them into file. Could it be the source of problems?I entirely removed loging functionality but still have another error: (gdb) thread apply all bt Thread 2 (Thread 0x7ffff2cb3700 (LWP 31995)): ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85 std.array.__T14arrayAllocImplVbi0TAhTmZ.arrayAllocImpl() () std.array.__T18uninitializedArrayTAhTymZ.uninitializedArray() () mkk_site.uri_page_router.MKK_Site_URIPageRouter.renderMessageBody() () mkk_site.uri_page_router.MKK_Site_URIPageRouter.customProcessRequest() () webtank.net.http.handler.EventBasedHTTPHandler.processRequest() () webtank.net.http.handler.HTTPRouter.customProcessRequest() () webtank.net.http.handler.EventBasedHTTPHandler.processRequest() () webtank.net.web_server.WorkingThread._work() () pthread_create.c:312 ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Thread 1 (Thread 0x7ffff7fbd980 (LWP 31988)): ../sysdeps/unix/syscall-template.S:81 webtank.net.web_server.WebServer.start() () (gdb) Notice that there is only 2 threads. I was having two loging threads each loging to it's individual file.
Feb 05 2016