From a384f578db158e03a8216ded58a85f751f9bc2a4 Mon Sep 17 00:00:00 2001 From: das Date: Sat, 23 Jun 2007 00:23:42 +0000 Subject: * macosx/tclMacOSXNotify.c (AtForkChild): don't call CoreFoundation APIs after fork() on systems where that would lead to an abort(). --- ChangeLog | 11 ++++++++--- macosx/tclMacOSXNotify.c | 25 ++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6093908..44f23fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-06-23 Daniel Steffen + + * macosx/tclMacOSXNotify.c (AtForkChild): don't call CoreFoundation + APIs after fork() on systems where that would lead to an abort(). + 2007-06-10 Jeff Hobbs * README: updated links. [Bug 1715081] @@ -13,8 +18,8 @@ 2007-06-05 Don Porter - * tests/result.test (result-6.2): Add test for Bug 1649062 so - that 8.4 and 8.5 both test the same outcome and we verify compatibility. + * tests/result.test (result-6.2): Add test for [Bug 1649062] so that + 8.4 and 8.5 both test the same outcome and we verify compatibility. 2007-05-30 Don Porter @@ -52,7 +57,7 @@ * changes: updates for 8.4.15 release. * win/tclWinReg.c: Bump to registry 1.1.5 to account - * library/reg/pkgIndex.tcl: for [1682211] bug fix. + * library/reg/pkgIndex.tcl: for [Bug 1682211] fix. 2007-05-10 Don Porter diff --git a/macosx/tclMacOSXNotify.c b/macosx/tclMacOSXNotify.c index ea94e8e..e6ae7b3 100644 --- a/macosx/tclMacOSXNotify.c +++ b/macosx/tclMacOSXNotify.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacOSXNotify.c,v 1.1.2.12 2007/04/29 02:21:33 das Exp $ + * RCS: @(#) $Id: tclMacOSXNotify.c,v 1.1.2.13 2007/06/23 00:23:42 das Exp $ */ #include "tclInt.h" @@ -289,6 +289,21 @@ static void AtForkChild(void); extern int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)) WEAK_IMPORT_ATTRIBUTE; #endif /* HAVE_WEAK_IMPORT */ +#ifdef __LP64__ +/* + * On 64bit Darwin 9 and later, it is not possible to call CoreFoundation after + * a fork. + */ +#if !defined(MAC_OS_X_VERSION_MIN_REQUIRED) || + MAC_OS_X_VERSION_MIN_REQUIRED < 1050 +MODULE_SCOPE long tclMacOSXDarwinRelease; +#define noCFafterFork (tclMacOSXDarwinRelease >= 9) +#else /* MAC_OS_X_VERSION_MIN_REQUIRED */ +#define noCFafterFork 1 +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ +#else /* __LP64__ */ +#define noCFafterFork 0 +#endif /* __LP64__ */ #endif /* HAVE_PTHREAD_ATFORK */ /* @@ -1257,7 +1272,9 @@ AtForkChild(void) UNLOCK_NOTIFIER_INIT; if (tsdPtr->runLoop) { tsdPtr->runLoop = NULL; - CFRunLoopSourceInvalidate(tsdPtr->runLoopSource); + if (!noCFafterFork) { + CFRunLoopSourceInvalidate(tsdPtr->runLoopSource); + } CFRelease(tsdPtr->runLoopSource); tsdPtr->runLoopSource = NULL; } @@ -1273,7 +1290,9 @@ AtForkChild(void) * Tcl_AlertNotifier may break in the child. */ - Tcl_InitNotifier(); + if (!noCFafterFork) { + Tcl_InitNotifier(); + } } } #endif /* HAVE_PTHREAD_ATFORK */ -- cgit v0.12