diff options
author | dgp <dgp@users.sourceforge.net> | 2005-09-28 18:31:57 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2005-09-28 18:31:57 (GMT) |
commit | 242ca27e8759537c7fe5c640c66084aee13fc51f (patch) | |
tree | be807328b612492b3c2370bd43c69bb8a2a3d2aa | |
parent | cf7a15b4c3e49dc9076c2c8fb3e80f179928946d (diff) | |
download | tk-242ca27e8759537c7fe5c640c66084aee13fc51f.zip tk-242ca27e8759537c7fe5c640c66084aee13fc51f.tar.gz tk-242ca27e8759537c7fe5c640c66084aee13fc51f.tar.bz2 |
* unix/tkUnixPort.h: Disabled inclusion of the private Tcl header
* win/tkWinPort.h: file tclInt.h. Tk ought to have a tiny and
shrinking number of calls of private Tcl routines. Each Tk source
file doing this should follow the convention in the macosx port and
have its own #include "tclInt.h".
* generic/tkEvent.c: Disabled calls to private Tcl routine
TclInExit(). See comment in TkCreateExitHandler() for full rationale.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | generic/tkEvent.c | 26 | ||||
-rw-r--r-- | unix/tkUnixPort.h | 6 | ||||
-rw-r--r-- | win/tkWinPort.h | 7 |
4 files changed, 44 insertions, 6 deletions
@@ -1,3 +1,14 @@ +2005-09-28 Don Porter <dgp@users.sourceforge.net> + + * unix/tkUnixPort.h: Disabled inclusion of the private Tcl header + * win/tkWinPort.h: file tclInt.h. Tk ought to have a tiny and + shrinking number of calls of private Tcl routines. Each Tk source + file doing this should follow the convention in the macosx port and + have its own #include "tclInt.h". + + * generic/tkEvent.c: Disabled calls to private Tcl routine + TclInExit(). See comment in TkCreateExitHandler() for full rationale. + 2005-09-21 Donal K. Fellows <donal.k.fellows@manchester.ac.uk> * generic/tkEvent.c (TkCreateThreadExitHandler, TkFinalizeThread) diff --git a/generic/tkEvent.c b/generic/tkEvent.c index fa81b65..ceffd0a 100644 --- a/generic/tkEvent.c +++ b/generic/tkEvent.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: tkEvent.c,v 1.29 2005/09/21 10:54:40 dkf Exp $ + * RCS: @(#) $Id: tkEvent.c,v 1.30 2005/09/28 18:31:57 dgp Exp $ */ #include "tkPort.h" @@ -1880,7 +1880,26 @@ TkCreateExitHandler( exitPtr->proc = proc; exitPtr->clientData = clientData; Tcl_MutexLock(&exitMutex); - if (firstExitPtr == NULL && !TclInExit()) { + + /* + * The call to TclInExit() is disabled here. That's a private + * Tcl routine, and calling it is causing some trouble with portability + * of building Tk. We should avoid private Tcl routines generally. + * + * In this case, the TclInExit() call is being used only to prevent + * a Tcl_CreateExitHandler() call when Tcl finalization is in progress. + * That's a situation that shouldn't happen anyway. Recent changes + * within Tcl_Finalize now cause a Tcl_Panic() to happen if exit + * handlers get added after exit handling is complete. By disabling + * the guard here, that panic will serve to help us find the buggy + * conditions and correct them. + * + * We can restore this guard if we find we must (hopefully getting + * public access to TclInExit() if we discover extensions really do + * need this), but during alpha development, this is a good time to + * dig in and find the root causes of finalization bugs. + */ + if (firstExitPtr == NULL/* && !TclInExit()*/) { Tcl_CreateExitHandler(TkFinalize, NULL); } exitPtr->nextPtr = firstExitPtr; @@ -1958,7 +1977,8 @@ TkCreateThreadExitHandler( exitPtr = (ExitHandler *) ckalloc(sizeof(ExitHandler)); exitPtr->proc = proc; exitPtr->clientData = clientData; - if (tsdPtr->firstExitPtr == NULL && !TclInExit()) { + /* See comments in TkCreateExitHandler */ + if (tsdPtr->firstExitPtr == NULL/* && !TclInExit()*/) { Tcl_CreateThreadExitHandler(TkFinalizeThread, NULL); } exitPtr->nextPtr = tsdPtr->firstExitPtr; diff --git a/unix/tkUnixPort.h b/unix/tkUnixPort.h index d65f7f2..bdb6340 100644 --- a/unix/tkUnixPort.h +++ b/unix/tkUnixPort.h @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkUnixPort.h,v 1.9 2003/10/14 23:11:03 jenglish Exp $ + * RCS: @(#) $Id: tkUnixPort.h,v 1.10 2005/09/28 18:31:57 dgp Exp $ */ #ifndef _UNIXPORT @@ -218,10 +218,12 @@ extern int errno; /* * The following declaration is used to get access to a private Tcl interface * that is needed for portability reasons. - */ + * + * Disabled for now to determined whether we really still need this. #ifndef _TCLINT #include <tclInt.h> #endif + */ #endif /* _UNIXPORT */ diff --git a/win/tkWinPort.h b/win/tkWinPort.h index 4eaec99..cb8def1 100644 --- a/win/tkWinPort.h +++ b/win/tkWinPort.h @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWinPort.h,v 1.9 2002/10/19 02:10:20 hobbs Exp $ + * RCS: @(#) $Id: tkWinPort.h,v 1.10 2005/09/28 18:31:57 dgp Exp $ */ #ifndef _WINPORT @@ -128,8 +128,13 @@ struct timezone { int tz_dsttime; }; +/* + * Disabled inclusion of Tcl's private header in hope of discovering we + * no longer need it. + * #ifndef _TCLINT #include <tclInt.h> #endif + */ #endif /* _WINPORT */ |