<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
There should be nothing special about select and kernel threads, perhaps even select and user threads.<br>The bug report is unusually good, though lacks the config file and the stacks of the other threads.<br>Maybe more later..<br><br> - Jay<br><br>> Date: Tue, 29 Dec 2009 18:47:48 +0100<br>> From: wagner@elegosoft.com<br>> To: m3devel@elegosoft.com<br>> Subject: [M3devel] Fwd: [CM3] #1080: CVSUPD server hangs if used with -C option<br>> <br>> Any ideas? Interaction problem between threads and select?<br>> <br>> Olaf<br>> <br>> ----- Forwarded message from bugs@elego.de -----<br>> Date: Tue, 29 Dec 2009 16:23:23 -0000<br>> From: CM3 <bugs@elego.de><br>> Reply-To: CM3 <bugs@elego.de><br>> Subject: [CM3] #1080: CVSUPD server hangs if used with -C option<br>> To: @MISSING_DOMAIN<br>> <br>> #1080: CVSUPD server hangs if used with -C option<br>> -----------------------------+----------------------------------------------<br>> Reporter: rajeshvadivelu | Owner: wagner<br>> Type: sw-bug | Status: new<br>> Priority: high | Milestone:<br>> Component: sys | Version: 5.8-RC3<br>> Severity: critical | Keywords:<br>> Relnote: | Confidential: no<br>> Org: Collabnet | Estimatedhours: 0<br>> Hours: 0 | Billable: 0<br>> Totalhours: 0 |<br>> -----------------------------+----------------------------------------------<br>> Htr:<br>> Install cvsup from cm3-bin-ws-cvsup-LINUXLIBC6-5.8.4-RC4.tgz package.<br>> <br>> Start the cvsupd server with -C option<br>> <br>> ./cvsupd -b /data/cvsupd -C 2<br>> <br>> Try cvsup client to connect to the sever<br>> <br>> ./cvsup -g -L 2 /tmp/cvsupd.cfg<br>> <br>> The client connection will hang and after sometime we will get <br>> "Inactivity timeout"<br>> <br>> <br>> Fix:<br>> <br>> <br>> <br>> Env:<br>> <br>> <br>> -----------------------------+----------------------------------------------<br>> In a RHEL5 32bit box I was trying to run cvsupd server to mirror my cvs<br>> repo. I did used cm3-bin-ws-cvsup-LINUXLIBC6-5.8.4-RC4.tgz to get the<br>> cvsup installed.<br>> <br>> The server starts find and there was no issues if I start the server<br>> without -C option.<br>> <br>> Starting cvsupd server without -C option<br>> <br>> $ ./cvsupd -b /u2/site/data/cvsupd<br>> 2009.12.29 21:31:05 IST [6225]: CVSup server started<br>> 2009.12.29 21:31:05 IST [6225]: Software version: 2009-08-30 21:02:46<br>> 2009.12.29 21:31:05 IST [6225]: Protocol version: 17.0<br>> 2009.12.29 21:31:05 IST [6225]: Ready to service requests<br>> <br>> Then I did a client request as below<br>> <br>> $ ./cvsup -g -L 2 /tmp/cvsupd.cfg<br>> Parsing supfile "/tmp/cvsupd.cfg"<br>> Connecting to myserver.com<br>> Connected to myserver.com<br>> Rejected by server: Access denied<br>> Will retry at 21:37:09<br>> <br>> So the request was successful and I get a valid error message at the<br>> client.<br>> <br>> But when I start the server with -C option like the one as below, requests<br>> from client are hanging and eventually getting "Inactivity timeout" after<br>> sometime.<br>> <br>> $ ./cvsupd -b /u2/site/data/cvsupd -C 2<br>> <br>> When ever a new client connection was made, this daemon clones another<br>> cvsupd process and it also hangs. So none of the client request were<br>> processed.<br>> <br>> Strace of the main cvsupd server process, when a new client request was<br>> fired.<br>> <br>> -----------------------------------<br>> select(4, [3], [], [3], {0, 39000}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 1 (in [3], left {0, 553000})<br>> accept(3, {sa_family=AF_INET, sin_port=htons(51221),<br>> sin_addr=inet_addr("208.75.198.60")}, [16]) = 6<br>> setsockopt(6, SOL_SOCKET, SO_LINGER, {onoff=1, linger=1}, 8) = 0<br>> setsockopt(6, SOL_TCP, TCP_NODELAY, [1], 4) = 0<br>> fcntl64(6, F_GETFL) = 0x2 (flags O_RDWR)<br>> fcntl64(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0<br>> gettimeofday({1262103026, 146476}, NULL) = 0<br>> open("/u2/site/data/cvsupd/cvsupd.access", O_RDONLY|O_LARGEFILE) = 7<br>> fstat64(7, {st_mode=S_IFREG|0755, st_size=215, ...}) = 0<br>> _llseek(7, 0, [0], SEEK_CUR) = 0<br>> fstat64(7, {st_mode=S_IFREG|0755, st_size=215, ...}) = 0<br>> close(7) = 0<br>> gettimeofday({1262103026, 147481}, NULL) = 0<br>> stat64("/u2/site/data/cvsupd/cvsupd.class", 0xbf809c04) = -1 ENOENT (No<br>> such file or directory)<br>> write(5, "\0", 1) = 1<br>> futex(0x91580f0, FUTEX_WAKE, 1) = 1<br>> futex(0x9158098, FUTEX_WAKE, 1) = 1<br>> futex(0x91580b8, FUTEX_WAKE, 1) = 1<br>> futex(0x91580bc, FUTEX_WAIT, 5, NULL) = -1 EAGAIN (Resource temporarily<br>> unavailable)<br>> futex(0x9158098, FUTEX_WAKE, 1) = 0<br>> clone(child_stack=0,<br>> flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,<br>> child_tidptr=0xb7f43708) = 6543<br>> futex(0x915a484, 0x5 /* FUTEX_??? */, 1) = 1<br>> futex(0x915a460, FUTEX_WAKE, 1) = 1<br>> futex(0x91580f0, FUTEX_WAKE, 1) = 1<br>> futex(0x9158098, FUTEX_WAKE, 1) = 1<br>> futex(0x91580b8, FUTEX_WAKE, 1) = 1<br>> futex(0x91580bc, FUTEX_WAIT, 7, NULL) = -1 EAGAIN (Resource temporarily<br>> unavailable)<br>> futex(0x9158098, FUTEX_WAKE, 1) = 0<br>> close(6) = 0<br>> accept(3, 0xbf809e44, [16]) = -1 EAGAIN (Resource temporarily<br>> unavailable)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> select(4, [3], [], [3], {1, 0}) = 0 (Timeout)<br>> <br>> ------------------------------------<br>> <br>> gdb backtrace of the main cvsupd server process<br>> <br>> ------------------------------------<br>> <br>> #0 0x00a2a402 in __kernel_vsyscall ()<br>> #1 0x0026efb1 in ___newselect_nocancel () from /lib/libc.so.6<br>> #2 0x00f8965b in Unix__select (nfds=4, readfds=0xb7f9df78,<br>> writefds=0xb7f9df88, exceptfds=0xb7f9df98, timeout=0xbfed9410) at<br>> ../src/unix/Common/UnixC.c:301<br>> #3 0x00f85f4b in ThreadPThread__XIOWait__CallSelect.779 (M3_Cwb5VA_nfd=4,<br>> M3_A4bqCj_timeout=0xbfed9410) at<br>> ../src/thread/PTHREAD/ThreadPThread.m3:900<br>> #4 0x00f85c7a in ThreadPThread__XIOWait (M3_BXP32l_self=0xb7f9400c,<br>> M3_Cwb5VA_fd=3, M3_AicXUJ_read=1 '\001',<br>> M3_CtKayy_interval=1.7976931348623157e+308, M3_AicXUJ_alertable=1 '\001')<br>> at ../src/thread/PTHREAD/ThreadPThread.m3:936<br>> #5 0x00f8589d in SchedulerPosix__IOAlertWait (M3_Cwb5VA_fd=3,<br>> M3_AicXUJ_read=1 '\001', M3_CtKayy_timeoutInterval=-1) at<br>> ../src/thread/PTHREAD/ThreadPThread.m3:854<br>> #6 0x00e4b499 in TCPMisc__AcceptFrom (M3_AahksS_c=0xb7f9ca48,<br>> M3_DoBjMZ_peer=0xbfed9970) at ../src/POSIX/TCP.m3:458<br>> #7 0x0807bcbf in FSServer__Run (M3_DS26rk_self=0xb7f9c9fc) at<br>> ../src/FSServer.m3:153<br>> #8 0x080934fd in Main_M3 (M3_AcxOUs_mode=1) at ../src/Main.m3:336<br>> #9 0x00f717c8 in RTLinker__RunMainBody (M3_DjPxE3_m=0x80a11a0) at<br>> ../src/runtime/common/RTLinker.m3:399<br>> #10 0x00f70b82 in RTLinker__AddUnitI (M3_DjPxE3_m=0x80a11a0) at<br>> ../src/runtime/common/RTLinker.m3:113<br>> #11 0x00f70c10 in RTLinker__AddUnit (M3_DjPxE5_b=0x8090f4e) at<br>> ../src/runtime/common/RTLinker.m3:122<br>> #12 0x0804db1e in main (argc=5, argv=0xbfeda124, envp=0xbfeda13c) at<br>> _m3main.mc:4<br>> ------------------------------------------------<br>> <br>> <br>> strace of the cloned cvsupd process<br>> <br>> -----------------------------------<br>> <br>> futex(0x91580bc, FUTEX_WAIT, 3, NULL<br>> <br>> -----------------------------------<br>> <br>> gdb backtrace of the cloned cvsupd process<br>> <br>> -----------------------------------<br>> <br>> #0 0x00a2a402 in __kernel_vsyscall ()<br>> #1 0x00320146 in pthread_cond_wait@@GLIBC_2.3.2 () from<br>> /lib/libpthread.so.0<br>> #2 0x00f886e6 in ThreadPThread__pthread_cond_wait (cond=0x89c60b8,<br>> mutex=0x89c6098) at ../src/thread/PTHREAD/ThreadPThreadC.c:326<br>> #3 0x00f81d9d in ThreadPThread__XWait (M3_BXP32l_self=0xb7f9400c,<br>> M3_AYIbX3_m=0xb7f9c8d8, M3_Bl0jv4_c=0xb7f9c8f4, M3_AicXUJ_alertable=0<br>> '\0') at ../src/thread/PTHREAD/ThreadPThread.m3:238<br>> #4 0x00f821ae in Thread__Wait (M3_AYIbX3_m=0xb7f9c8d8,<br>> M3_Bl0jv4_c=0xb7f9c8f4) at ../src/thread/PTHREAD/ThreadPThread.m3:280<br>> #5 0x00bd4e14 in SigHandler__ChangeState (M3_BnMAgS_d=0xb7f9c4bc,<br>> M3_AkN0P6_state=2 '\002') at ../src/SigHandler.m3:105<br>> #6 0x00bd5ba6 in SigHandler__ShutDown () at ../src/SigHandler.m3:243<br>> #7 0x0807cbac in FSServer_M3_LINE_230.718 (L_2=0xbfed95d0) at<br>> ../src/FSServer.m3:231<br>> #8 0x0807c956 in FSServer__Run (M3_DS26rk_self=0xb7f9c9fc) at<br>> ../src/FSServer.m3:227<br>> #9 0x080934fd in Main_M3 (M3_AcxOUs_mode=1) at ../src/Main.m3:336<br>> #10 0x00f717c8 in RTLinker__RunMainBody (M3_DjPxE3_m=0x80a11a0) at<br>> ../src/runtime/common/RTLinker.m3:399<br>> #11 0x00f70b82 in RTLinker__AddUnitI (M3_DjPxE3_m=0x80a11a0) at<br>> ../src/runtime/common/RTLinker.m3:113<br>> #12 0x00f70c10 in RTLinker__AddUnit (M3_DjPxE5_b=0x8090f4e) at<br>> ../src/runtime/common/RTLinker.m3:122<br>> #13 0x0804db1e in main (argc=5, argv=0xbfeda124, envp=0xbfeda13c) at<br>> _m3main.mc:4<br>> <br>> -------------------------------------------<br>> <br>> So it looks like both the main and cloned cvsupd processes were waiting<br>> for a response from the kernel call "__kernel_vsyscall ()". Under what<br>> condition will this happen? Am I doing something wrong here?<br>> <br>> -- <br>> Ticket URL: <http://projects.elego.de/cm3/ticket/1080><br>> CM3 <http://projects.elego.de/cm3><br>> Critical Mass Modula3 Compiler<br>> <br>> <br>> ----- End forwarded message -----<br>> <br>> <br>> -- <br>> Olaf Wagner -- elego Software Solutions GmbH<br>> Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin, Germany<br>> phone: +49 30 23 45 86 96 mobile: +49 177 2345 869 fax: +49 30 23 45 86 95<br>> http://www.elegosoft.com | Geschäftsführer: Olaf Wagner | Sitz: Berlin<br>> Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194<br>> <br> </body>
</html>