##// 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:

r27925:f6d73c87 stable
r29602:4fc4b8cc default
Show More
ReadMe.html
162 lines | 4.6 KiB | text/html | HtmlLexer
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Mercurial for Windows</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<style type="text/css">
<!--
html {
font-family: sans-serif;
margin: 1em 2em;
}
p {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
pre {
margin: 0.25em 0em;
padding: 0.5em;
background-color: #EEE;
border: thin solid #CCC;
}
.indented {
padding-left: 10pt;
}
-->
</style>
</head>
<body>
<h1>Mercurial for Windows</h1>
<p>Welcome to Mercurial for Windows!</p>
<p>
Mercurial is a command-line application. You must run it from
the Windows command prompt (or if you're hard core, a <a
href="http://www.mingw.org/">MinGW</a> shell).
</p>
<p class="indented">
<i>Note: the standard <a href="http://www.mingw.org/">MinGW</a>
msys startup script uses rxvt which has problems setting up
standard input and output. Running bash directly works
correctly.</i>
</p>
<p>
For documentation, please visit the <a
href="https://mercurial-scm.org/">Mercurial web site</a>.
You can also download a free book, <a
href="http://hgbook.red-bean.com/">Mercurial: The Definitive
Guide</a>.
</p>
<p>
By default, Mercurial installs to <tt>C:\Program
Files\Mercurial</tt>. The Mercurial command is called
<tt>hg.exe</tt>.
</p>
<h1>Testing Mercurial after you've installed it</h1>
<p>
The easiest way to check that Mercurial is installed properly is
to just type the following at the command prompt:
</p>
<pre>
hg
</pre>
<p>
This command should print a useful help message. If it does,
other Mercurial commands should work fine for you.
</p>
<h1>Configuration notes</h1>
<h4>Default editor</h4>
<p>
The default editor for commit messages is 'notepad'. You can set
the <tt>EDITOR</tt> (or <tt>HGEDITOR</tt>) environment variable
to specify your preference or set it in <tt>mercurial.ini</tt>:
</p>
<pre>
[ui]
editor = whatever
</pre>
<h4>Configuring a Merge program</h4>
<p>
It should be emphasized that Mercurial by itself doesn't attempt
to do a Merge at the file level, neither does it make any
attempt to Resolve the conflicts.
</p>
<p>
By default, Mercurial will use the merge program defined by the
<tt>HGMERGE</tt> environment variable, or uses the one defined
in the <tt>mercurial.ini</tt> file. (see <a
href="https://mercurial-scm.org/wiki/MergeProgram">MergeProgram</a>
on the Mercurial Wiki for more information)
</p>
<h1>Reporting problems</h1>
<p>
Before you report any problems, please consult the <a
href="https://mercurial-scm.org/">Mercurial web site</a>
and see if your question is already in our list of <a
href="https://mercurial-scm.org/wiki/FAQ">Frequently
Answered Questions</a> (the "FAQ").
</p>
<p>
If you cannot find an answer to your question, please feel free
to send mail to the Mercurial mailing list, at <a
href="mailto:mercurial@selenic.com">mercurial@selenic.com</a>.
<b>Remember</b>, the more useful information you include in your
report, the easier it will be for us to help you!
</p>
<p>
If you are IRC-savvy, that's usually the fastest way to get
help. Go to <tt>#mercurial</tt> on <tt>irc.freenode.net</tt>.
</p>
<h1>Author and copyright information</h1>
<p>
Mercurial was written by <a href="http://www.selenic.com">Matt
Mackall</a>, and is maintained by Matt and a team of volunteers.
</p>
<p>
The Windows installer was written by <a
href="http://www.serpentine.com/blog">Bryan O'Sullivan</a>.
</p>
<p>
Mercurial is Copyright 2005-2016 Matt Mackall and others. See
the <tt>Contributors.txt</tt> file for a list of contributors.
</p>
<p>
Mercurial is free software; you can redistribute it and/or
modify it under the terms of the <a
href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GNU
General Public License version 2</a> or any later version.
</p>
<p>
Mercurial is distributed in the hope that it will be useful, but
<b>without any warranty</b>; without even the implied warranty
of <b>merchantability</b> or <b>fitness for a particular
purpose</b>. See the GNU General Public License for more
details.
</p>
</body>
</html>