traceback from hg serve

Matt Mackall mpm at selenic.com
Mon Apr 28 21:11:01 UTC 2014


On Mon, 2014-04-28 at 10:25 +0100, James Gregory wrote:
> Actually, updating mercurial to 2.9.1 didn't fix the error, it just so
> happened to not occur for an hour after making the upgrade.

Hmm, your original backtrace line numbers lined up only with 2.9.x.

>  Applying
> the above patch also didn't make any difference. I have now changed
> the line in config __init __ from:
> 
> for k in data._data:
> 
> to:
> 
> for k in data._data.copy():
> 
> to see if that helps, though I admit I have no real understanding of
> what the code is actually doing. Being intermittent it kinds of looks
> like it could be a concurrency bug,

It's absolutely a concurrency bug. It's pretty hard to hit in my testing
though.. I had a setup hitting hgweb 20-30 times per second and was only
seeing the problem occur every 10 minutes or so.

Mercurial generally handles concurrency by avoiding sharing objects
read/write across threads (rather than locking). One place this isn't
properly respected is in managing the global configuration. If we write
to the global config (eg to turn off verbosity globally) while another
thread is reading, things can break.

-- 
Mathematics is the supreme nostalgia of our time.





More information about the Mercurial mailing list