Re: [Mono-dev] _wapi_connect stuck in poll()
Will this be committed to trunk / 2.4.x LTS branch ? On Sun, May 30, 2010 at 7:48 PM, yoni shalom silve...@gmail.com wrote: Edited the patch to aligned with 2.4.2.3 source code (which I'm compiling from), and attached. Patch seems to fix it, thanks. (sorry for the double-send -g) Yoni Shalom. On Tue, May 25, 2010 at 10:15 PM, Geoff Norton gnor...@novell.com wrote: Can you try this patch? -g On 2010-05-25, at 3:05 PM, yoni shalom wrote: Tested on Mono 2.4.2.3, 2.6.x Both leopard and snow leopard. It seems as though _sometime_ (ranges from 0 to 5 out of 50) threads that are in the middle of performing Socket.Connect() on which Thread.Abort() is called, never exit and cause the thread to leak and be stuck indefinitely. The offending thread is stuck in Socket.Connect()-Connect_internal-_wapi_connect-poll(). I'm attaching a test program - just let it run, wait for 30 seconds and then in gdb display all stacks ( t apply all bt ) and you will see the threads stuck in ves_blabla_Connect_Internal() The code I'm talking about is this (mono/io-layer/sockets.c) : while (poll (fds, 1, -1) == -1 !_wapi_thread_cur_apc_pending ()) { if (errno != EINTR) { errnum = errno_to_WSA (errno, __func__); #ifdef DEBUG g_message (%s: connect poll error: %s, __func__, strerror (errno)); #endif WSASetLastError (errnum); return(SOCKET_ERROR); } } I've been trying to debug this code without much luck understanding what is special to the misbehaving scenario... A change in the first line of code, allowing for a timeout of 3 seconds in the poll syscall (not sure how correct this is), seems to solve the problem for me. int prslt; while(((prslt = poll(fds, 1, 3000)) == 0) || (prslt == -1 !_wapi_thread_cur_apc_pending()) { ... Obviously this is not optimal, and as such - is not a solution proposal but just additional info. BeginConnect.zip___ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list ___ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list
Re: [Mono-dev] _wapi_connect stuck in poll()
Edited the patch to aligned with 2.4.2.3 source code (which I'm compiling from), and attached. Patch seems to fix it, thanks. (sorry for the double-send -g) Yoni Shalom. On Tue, May 25, 2010 at 10:15 PM, Geoff Norton gnor...@novell.com wrote: Can you try this patch? -g On 2010-05-25, at 3:05 PM, yoni shalom wrote: Tested on Mono 2.4.2.3, 2.6.x Both leopard and snow leopard. It seems as though _sometime_ (ranges from 0 to 5 out of 50) threads that are in the middle of performing Socket.Connect() on which Thread.Abort() is called, never exit and cause the thread to leak and be stuck indefinitely. The offending thread is stuck in Socket.Connect()-Connect_internal-_wapi_connect-poll(). I'm attaching a test program - just let it run, wait for 30 seconds and then in gdb display all stacks ( t apply all bt ) and you will see the threads stuck in ves_blabla_Connect_Internal() The code I'm talking about is this (mono/io-layer/sockets.c) : while (poll (fds, 1, -1) == -1 !_wapi_thread_cur_apc_pending ()) { if (errno != EINTR) { errnum = errno_to_WSA (errno, __func__); #ifdef DEBUG g_message (%s: connect poll error: %s, __func__, strerror (errno)); #endif WSASetLastError (errnum); return(SOCKET_ERROR); } } I've been trying to debug this code without much luck understanding what is special to the misbehaving scenario... A change in the first line of code, allowing for a timeout of 3 seconds in the poll syscall (not sure how correct this is), seems to solve the problem for me. int prslt; while(((prslt = poll(fds, 1, 3000)) == 0) || (prslt == -1 !_wapi_thread_cur_apc_pending()) { ... Obviously this is not optimal, and as such - is not a solution proposal but just additional info. BeginConnect.zip___ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list poll-fix.diff Description: Binary data ___ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list
Re: [Mono-dev] _wapi_connect stuck in poll()
Can you try this patch? -g poll-fix.diff Description: Binary data On 2010-05-25, at 3:05 PM, yoni shalom wrote: Tested on Mono 2.4.2.3, 2.6.x Both leopard and snow leopard. It seems as though _sometime_ (ranges from 0 to 5 out of 50) threads that are in the middle of performing Socket.Connect() on which Thread.Abort() is called, never exit and cause the thread to leak and be stuck indefinitely. The offending thread is stuck in Socket.Connect()-Connect_internal-_wapi_connect-poll(). I'm attaching a test program - just let it run, wait for 30 seconds and then in gdb display all stacks ( t apply all bt ) and you will see the threads stuck in ves_blabla_Connect_Internal() The code I'm talking about is this (mono/io-layer/sockets.c) : while (poll (fds, 1, -1) == -1 !_wapi_thread_cur_apc_pending ()) { if (errno != EINTR) { errnum = errno_to_WSA (errno, __func__); #ifdef DEBUG g_message (%s: connect poll error: %s, __func__, strerror (errno)); #endif WSASetLastError (errnum); return(SOCKET_ERROR); } } I've been trying to debug this code without much luck understanding what is special to the misbehaving scenario... A change in the first line of code, allowing for a timeout of 3 seconds in the poll syscall (not sure how correct this is), seems to solve the problem for me. int prslt; while(((prslt = poll(fds, 1, 3000)) == 0) || (prslt == -1 !_wapi_thread_cur_apc_pending()) { ... Obviously this is not optimal, and as such - is not a solution proposal but just additional info. BeginConnect.zip___ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list ___ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list