##// END OF EJS Templates
chg: handle EOF reading data block...
chg: handle EOF reading data block We recently discovered a case in production that chg uses 100% CPU and is trying to read data forever: recvfrom(4, "", 1814012019, 0, NULL, NULL) = 0 Using gdb, apparently readchannel() got wrong data. It was reading in an infinite loop because rsize == 0 does not exit the loop, while the server process had ended. (gdb) bt #0 ... in recv () at /lib64/libc.so.6 #1 ... in readchannel (...) at /usr/include/bits/socket2.h:45 #2 ... in readchannel (hgc=...) at hgclient.c:129 #3 ... in handleresponse (hgc=...) at hgclient.c:255 #4 ... in hgc_runcommand (hgc=..., args=<optimized>, argsize=<optimized>) #5 ... in main (argc=...486922636, argv=..., envp=...) at chg.c:661 (gdb) frame 2 (gdb) p *hgc $1 = {sockfd = 4, pid = 381152, ctx = {ch = 108 'l', data = 0x7fb05164f010 "st):\nTraceback (most recent call last):\n" "Traceback (most recent call last):\ne", maxdatasize = 1814065152," " datasize = 1814064225}, capflags = 16131} This patch addresses the infinite loop issue by detecting continuously empty responses and abort in that case. Note that datasize can be translated to ['l', ' ', 'l', 'a']. Concatenate datasize and data, it forms part of "Traceback (most recent call last):". This may indicate a server-side channeledoutput issue. If it is a race condition, we may want to use flock to protect the channels.

File last commit:

r27684:e9857fbf default
r29602:4fc4b8cc default
Show More
guids.wxi
52 lines | 2.5 KiB | text/plain | TextLexer
<Include>
<!-- These are component GUIDs used for Mercurial installers.
YOU MUST CHANGE ALL GUIDs below when copying this file
and replace 'Mercurial' in this notice with the name of
your project. Component GUIDs have global namespace! -->
<!-- contrib.wxs -->
<?define contrib.guid = {4E11FFC2-E2F7-482A-8460-9394B5489F02} ?>
<?define contrib.vim.guid = {BB04903A-652D-4C4F-9590-2BD07A2304F2} ?>
<!-- dist.wxs -->
<?define dist.guid = {CE405FE6-CD1E-4873-9C9A-7683AE5A3D90} ?>
<?define lib.guid = {91D53B14-E924-432A-ACA2-65F9B3F7C56A} ?>
<!-- doc.wxs -->
<?define doc.hg.1.html.guid = {AAAA3FDA-EDC5-4220-B59D-D342722358A2} ?>
<?define doc.hgignore.5.html.guid = {AA9118C4-F3A0-4429-A5F4-5A1906B2D67F} ?>
<?define doc.hgrc.5.html = {E0CEA1EB-FA01-408c-844B-EE5965165BAE} ?>
<?define doc.style.css = {172F8262-98E0-4711-BD39-4DAE0D77EF05} ?>
<!-- help.wxs -->
<?define help.root.guid = {9FA957DB-6DFE-44f2-AD03-293B2791CF17} ?>
<?define help.internals.guid = {2DD7669D-0DB8-4C39-9806-78E6475E7ACC} ?>
<!-- i18n.wxs -->
<?define i18nFolder.guid = {1BF8026D-CF7C-4174-AEE6-D6B7BF119248} ?>
<!-- templates.wxs -->
<?define templates.root.guid = {437FD55C-7756-4EA0-87E5-FDBE75DC8595} ?>
<?define templates.atom.guid = {D30E14A5-8AF0-4268-8B00-00BEE9E09E39} ?>
<?define templates.coal.guid = {B63CCAAB-4EAF-43b4-901E-4BD13F5B78FC} ?>
<?define templates.gitweb.guid = {827334AF-1EFD-421B-962C-5660A068F612} ?>
<?define templates.json.guid = {F535BE7A-EC34-46E0-B9BE-013F3DBAFB19} ?>
<?define templates.monoblue.guid = {8060A1E4-BD4C-453E-92CB-9536DC44A9E3} ?>
<?define templates.paper.guid = {61AB1DE9-645F-46ED-8AF8-0CF02267FFBB} ?>
<?define templates.raw.guid = {834DF8D7-9784-43A6-851D-A96CE1B3575B} ?>
<?define templates.rss.guid = {9338FA09-E128-4B1C-B723-1142DBD09E14} ?>
<?define templates.spartan.guid = {80222625-FA8F-44b1-86CE-1781EF375D09} ?>
<?define templates.static.guid = {6B3D7C24-98DA-4B67-9F18-35F77357B0B4} ?>
<!-- mercurial.wxs -->
<?define ProductUpgradeCode = {A1CC6134-E945-4399-BE36-EB0017FDF7CF} ?>
<?define ComponentMainExecutableGUID = {D102B8FA-059B-4ACC-9FA3-8C78C3B58EEF} ?>
<?define ReadMe.guid = {56A8E372-991D-4DCA-B91D-93D775974CF5} ?>
<?define COPYING.guid = {B7801DBA-1C49-4BF4-91AD-33C65F5C7895} ?>
<?define mercurial.rc.guid = {1D5FAEEE-7E6E-43B1-9F7F-802714316B15} ?>
<?define mergetools.rc.guid = {E8A1DC29-FF40-4B5F-BD12-80B9F7BF0CCD} ?>
<?define ProgramMenuDir.guid = {D5A63320-1238-489B-B68B-CF053E9577CA} ?>
</Include>