This is the mail archive of the
mailing list for the Cygwin project.
Re: (call-process ...) hangs in emacs
- From: Ken Brown <kbrown at cornell dot edu>
- To: cygwin at cygwin dot com
- Date: Thu, 07 Aug 2014 14:53:58 -0400
- Subject: Re: (call-process ...) hangs in emacs
- Authentication-results: sourceware.org; auth=none
- References: <53DB8D23 dot 7060806 at alice dot it> <CAK9Gx1cjj-7cDP7CunD7Bxz35L+SU9+4Ro3HRot5cwjcArudOA at mail dot gmail dot com> <20140801133225 dot GD25860 at calimero dot vinschen dot de> <53DEDBBA dot 20102 at cornell dot edu> <20140804080034 dot GA2578 at calimero dot vinschen dot de> <53DF8BDC dot 8090104 at cornell dot edu> <20140804134526 dot GK2578 at calimero dot vinschen dot de> <53E0CC2D dot 4080305 at cornell dot edu> <20140805135830 dot GA9994 at calimero dot vinschen dot de> <53E11A93 dot 9070800 at cornell dot edu> <20140805184047 dot GC13601 at calimero dot vinschen dot de> <53E3685B dot 8050508 at cornell dot edu> <53E39BAD dot 3010004 at redhat dot com>
On 8/7/2014 11:30 AM, Eric Blake wrote:
On 08/07/2014 05:51 AM, Ken Brown wrote:
I think I found the problem with NORMAL mutexes. emacs calls
pthread_atfork after initializing the mutexes, and the resulting
'prepare' handler locks the mutexes. (The parent and child handlers
unlock them.) So when emacs calls fork, the mutexes are locked, and
shortly thereafter the Cygwin DLL calls calloc, leading to a deadlock.
Here's a gdb backtrace showing the sequence of calls:
Arguably, that's an upstream bug in emacs. POSIX has declared
pthread_atfork to be fundamentally useless; it is broken by design,
because you cannot use it for anything that is not async-signal-safe
without risking deadlock. And (except for sem_post()), NONE of the
standardized locking functions are async-signal-safe.
That said, it would still be nice to support this, since even though the
theory says it is broken, there are still lots of (broken)
programs/libraries still trying to use it.
So what do you think emacs should do instead of using pthread_atfork?
Or is it better to just remove it? I don't know how likely it is that
this would cause a problem.
Problem reports: http://cygwin.com/problems.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple