diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2015-07-23 17:09:58 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2015-07-23 17:09:58 (GMT) |
commit | 0dfed6948cae4e926c49b5fc888b4b74b247a262 (patch) | |
tree | 085eb933a60ff0edec54f99a646543cbc8f64816 /unix/tclUnixNotfy.c | |
parent | f42f4ba9e433ebb4b0234a6c5dbf445a82fe085a (diff) | |
parent | 61947d12ec0d917d65a31b72dd14c2ee52c2ce5a (diff) | |
download | tcl-0dfed6948cae4e926c49b5fc888b4b74b247a262.zip tcl-0dfed6948cae4e926c49b5fc888b4b74b247a262.tar.gz tcl-0dfed6948cae4e926c49b5fc888b4b74b247a262.tar.bz2 |
Fix bug [57945b574a6df0332efc4ac96b066f7c347b28f7|57945b574a]: lock in forking process under heavy multithreading. Thanks to Joe Mistachkin for the implementation of the fix, and Gustaf Neumann for the original report and testing the fix.
Diffstat (limited to 'unix/tclUnixNotfy.c')
-rw-r--r-- | unix/tclUnixNotfy.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/unix/tclUnixNotfy.c b/unix/tclUnixNotfy.c index b2bea45..17fdc95 100644 --- a/unix/tclUnixNotfy.c +++ b/unix/tclUnixNotfy.c @@ -1334,6 +1334,9 @@ NotifierThreadProc( static void AtForkPrepare(void) { + Tcl_MutexLock(¬ifierMutex); + TclpMasterLock(); + TclpMutexLock(); } /* @@ -1355,6 +1358,9 @@ AtForkPrepare(void) static void AtForkParent(void) { + TclpMutexUnlock(); + TclpMasterUnlock(); + Tcl_MutexUnlock(¬ifierMutex); } /* @@ -1376,7 +1382,9 @@ AtForkParent(void) static void AtForkChild(void) { - Tcl_MutexFinalize(¬ifierMutex); + TclpMutexUnlock(); + TclpMasterUnlock(); + TclMutexUnlockAndFinalize(¬ifierMutex); Tcl_InitNotifier(); } #endif /* HAVE_PTHREAD_ATFORK */ |