Tcl Source Code

Artifact [0c6a16db60]
Login

Artifact 0c6a16db60e52858792ed35de9315af59c1e24a3:

Ticket change [0c6a16db60] - Ticket [97069ea11a] close returns empty error message if failed non-blocking write flush pending status still Open with 3 other changes by oehhar 2014-03-25 09:55:25.
D 2014-03-25T09:55:25.276
J comment <h1>Issue</h1>\r\nThe\strailing\sclose\sin\sthe\sfollowing\ssequence\sthrows\san\serror\sbut\sno\serror\smessage:\r\n<verbatim>\r\n%\sset\ssock\s[socket\s-async\slocalhost\s30001]\r\nsock420\r\n%\sfconfigure\s$sock\s-blocking\s0\r\n%\sputs\s$sock\sok\r\n%\sflush\s$sock\r\n%\sfileevent\s$sock\swritable\s{set\sx\s1}\r\n%\svwait\sx\r\n%\scatch\s{close\s$sock}\se\sd\r\n1\r\n%\sset\se\r\n%\sset\sd\r\n-code\s1\s-level\s0\s-errorstack\s{INNER\s{invokeStk1\sclose\ssock420}}\s-errorcode\sNONE\r\n-errorinfo\s{\r\n\s\s\s\swhile\sexecuting\r\n"close\s$sock"}\s-errorline\s1\r\n</verbatim>\r\n\r\nThere\sare\stwo\sconditions:\r\n\s\s\s*\s\s\sThe\ssocket\sconnect\smust\sfail\r\n\s\s\s*\s\s\sflush\s$sock\sis\sexecuted\sbefore\sthe\ssocket\sconnect\sinternally\sfailed.\sFor\smachines\swhere\sthis\sis\sto\squick,\sone\smust\suse\sanother\shost\sinstead\slocalhost\swhich\srequires\sa\slong\sDNS\squery.\r\n\s\s\s*\s\s\sThere\sare\salso\srelations\swith\smultiple\sconnect\srounds\swithin\san\sIPV6\senabled\ssystem\s(TCL8.6.1\sLinux).\r\n\r\nThis\sarises\son\sthe\sfollowing\splatforms:\r\n\s\s\s*\s\s\sTCL\s8.5.15\son\sWindows\sVista\s32\sbit\s\r\n\s\s\s*\s\s\sTCL\s8.6.1\son\sWindows\sVista\s32\sbit\r\n\s\s\s*\s\s\sTCL\s8.6.1\son\sLinux\stoo\s(Reported\sbei\sReinhard\sMax)\r\n\r\n<h1>Possible\sreasons</h1>\r\n\r\nThe\serror\sis\sgenerated\sby\sa\sbackround\sflush\ssheduled\sby\sthe\swritable\sevent.\r\nThe\serror\scode\sis\sstored\sin\sunreportedError.\r\nEventually,\sthe\serror\smessage\sis\smissing\sin\sunreportedMsg.\r\n\r\nA\sdebug\strace\son\stclIO.c:\r\n\r\n<h2>flush\s$sock</h2>\r\n\s\s\s*\s\s\stclIO.c:FlushChannel()\r\n\s\s\s*\s\s\scalls\stclWinSock.c:TclOutputProc("ok"),\swhich\sreturns\serror\sEWOULDBLOCK\r\n\s\s\s*\s\s\sSets\sflag\sBG_FLUSH_SCHEDULED\r\n\s\s\s*\s\s\sClears\serror\r\n\r\n<h2>vwait\sx</h2>\r\n\s\s\s*\s\s\stclIO.c:FlushChannel(calledFromAsyncFlush=1)\r\n\s\s\s*\s\s\scalls\stclWinSock.c:TclOutputProc("ok"),\swhich\stries\sto\swrite\sand\sreturns\serror\s126\r\n\s\s\s*\s\s\sSets\sstatePtr->unreportedError\s=\serrorCode\s(126)\r\n\s\s\s*\s\s\sstatePtr->unreportedMsg\s=\smsg\s(NULL)\r\n\s\s\s*\s\s\sCalls\sDiscardOutputQueued(statePtr)\r\n\s\s\s*\s\s\sFlag\sBG_FLUSH_SCHEDULED\sis\scleared\s(no\sdata)\r\n\r\n<h2>close\s$sock</h2>\r\n\s\s\s*\s\s\stclIO.c:Tcl_Close()\r\n\s\s\s*\s\s\s>\sTcl_Close\scalls\sFlushChannel(interp,\schanPtr,\s0)\r\n\s\s\s*\s\s\s>>\sFlushChannel\scalls\sCloseChannel(interp,\schanPtr,\serrorCode)\r\n\s\s\s*\s\s\s>>>\sCloseChannel\scalls\sChanClose(chanPtr,\sinterp)\r\n\s\s\s*\s\s\s>>>>\sChanClose\scalls\stclWinSock.c:TclCloseProc(),\swhich\ssucceeds\r\n\s\s\s*\s\s\s>>>\sCloseChannel\ssets\serrorCode\s=\sstatePtr->unreportedError;\s(126)\r\n\s\s\s*\s\s\s>>>\sCloseChannel\scalls\sTcl_SetChannelErrorInterp()\swith\sNULL\sstatePtr->unreportedMsg\r\n\s\s\s*\s\s\s>>>\sCloseChannel\sreturns\serrorCode\s(126)\r\n\s\s\s*\s\s\s>>\sFLushChannel\sreturns\serrorCode\s(126)\r\n\s\s\s*\s\s\s>\sTcl_Close\sreturns\serror:\sif\s((flushcode\s!=\s0)\s||\s(result\s!=\s0))\s{\sreturn\sTCL_ERROR;\s}
J login oehhar
J mimetype text/plain
K 97069ea11aca3783949c0379725eed90f5573c23
U oehhar
Z 225da97c6898999dc7d3782e849d2f23