summaryrefslogtreecommitdiffstats
path: root/generic/tclAsync.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclAsync.c')
-rw-r--r--generic/tclAsync.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/generic/tclAsync.c b/generic/tclAsync.c
index dcde29e..44ffbea 100644
--- a/generic/tclAsync.c
+++ b/generic/tclAsync.c
@@ -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: tclAsync.c,v 1.13.2.1 2008/04/27 08:05:39 vasiljevic Exp $
+ * RCS: @(#) $Id: tclAsync.c,v 1.13.2.2 2008/04/27 08:26:05 vasiljevic Exp $
*/
#include "tclInt.h"
@@ -278,19 +278,20 @@ Tcl_AsyncDelete(
AsyncHandler *prevPtr, *thisPtr;
/*
+ * Assure early handling of the constraint
+ */
+
+ if (asyncPtr->originThrdId != Tcl_GetCurrentThread()) {
+ panic("Tcl_AsyncDelete: async handler deleted by the wrong thread");
+ }
+
+ /*
* If we come to this point when TSD's for the current
* thread have already been garbage-collected, we are
* in the _serious_ trouble. OTOH, we tolerate calling
* with already cleaned-up handler list (should we?).
*/
- /*
- * Conservatively check the existence of the linked list of
- * registered handlers, as we may come at this point even
- * when the TSD's for the current thread have been already
- * garbage-collected.
- */
-
Tcl_MutexLock(&tsdPtr->asyncMutex);
if (tsdPtr->firstHandler != NULL) {
prevPtr = thisPtr = tsdPtr->firstHandler;