Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | [a57b6c3fd4] Prevent -eventmark related deadlock. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | bug-a57b6c3fd4 |
Files: | files | file ages | folders |
SHA1: |
12e5e4c993e89c22a533526213b7bb3a |
User & Date: | dgp 2015-05-01 17:17:28 |
Context
2015-05-08
| ||
14:21 | TEA update Closed-Leaf check-in: f4a8039bf0 user: dgp tags: bug-a57b6c3fd4 | |
2015-05-01
| ||
17:17 | [a57b6c3fd4] Prevent -eventmark related deadlock. check-in: 12e5e4c993 user: dgp tags: bug-a57b6c3fd4 | |
2015-03-27
| ||
20:33 | Use the new TCL_MINIMUM_VERSION macro in one additional place missed in the previous check-in. check-in: 593a90d9bc user: mistachkin tags: trunk | |
Changes
Changes to generic/threadCmd.c.
︙ | ︙ | |||
263 264 265 266 267 268 269 270 271 272 273 274 275 276 | /* * Definition of flags for ThreadSend. */ #define THREAD_SEND_WAIT 1<<1 #define THREAD_SEND_HEAD 1<<2 #ifdef BUILD_thread # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLEXPORT #endif /* | > | 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 | /* * Definition of flags for ThreadSend. */ #define THREAD_SEND_WAIT 1<<1 #define THREAD_SEND_HEAD 1<<2 #define THREAD_SEND_CLBK 1<<3 #ifdef BUILD_thread # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLEXPORT #endif /* |
︙ | ︙ | |||
2743 2744 2745 2746 2747 2748 2749 | Tcl_ThreadQueueEvent(thrId, (Tcl_Event*)eventPtr, TCL_QUEUE_TAIL); } Tcl_ThreadAlert(thrId); if ((flags & THREAD_SEND_WAIT) == 0) { /* * Might potentially spend some time here, until the | | > | | | | > | 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 | Tcl_ThreadQueueEvent(thrId, (Tcl_Event*)eventPtr, TCL_QUEUE_TAIL); } Tcl_ThreadAlert(thrId); if ((flags & THREAD_SEND_WAIT) == 0) { /* * Might potentially spend some time here, until the * worker thread cleans up its queue a little bit. */ if ((flags & THREAD_SEND_CLBK) == 0) { while (tsdPtr->maxEventsCount && tsdPtr->eventsPending > tsdPtr->maxEventsCount) { Tcl_ConditionWait(&tsdPtr->doOneEvent, &threadMutex, NULL); } } Tcl_MutexUnlock(&threadMutex); return TCL_OK; } /* * Block on the result indefinitely. */ |
︙ | ︙ | |||
3092 3093 3094 3095 3096 3097 3098 | interp = (sendPtr && sendPtr->interp) ? sendPtr->interp : tsdPtr->interp; if (interp != NULL) { Tcl_Preserve((ClientData)interp); if (clbkPtr && clbkPtr->threadId == thrId) { Tcl_Release((ClientData)interp); | | | 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 | interp = (sendPtr && sendPtr->interp) ? sendPtr->interp : tsdPtr->interp; if (interp != NULL) { Tcl_Preserve((ClientData)interp); if (clbkPtr && clbkPtr->threadId == thrId) { Tcl_Release((ClientData)interp); /* Watch: this thread evaluates its own callback. */ interp = clbkPtr->interp; Tcl_Preserve((ClientData)interp); } Tcl_ResetResult(interp); if (sendPtr) { |
︙ | ︙ | |||
3155 3156 3157 3158 3159 3160 3161 | */ if (code != TCL_OK) { ThreadErrorProc(interp); } ThreadSetResult(interp, code, &clbkPtr->result); | | | 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 | */ if (code != TCL_OK) { ThreadErrorProc(interp); } ThreadSetResult(interp, code, &clbkPtr->result); ThreadSend(interp, clbkPtr->threadId, tmpPtr, NULL, THREAD_SEND_CLBK); } else if (code != TCL_OK) { /* * Only pass errors onto the registered error handler * when we don't have a result target for this event. */ ThreadErrorProc(interp); |
︙ | ︙ |