diff options
| author | dgp@users.sourceforge.net <dgp> | 2013-02-25 18:15:36 (GMT) |
|---|---|---|
| committer | dgp@users.sourceforge.net <dgp> | 2013-02-25 18:15:36 (GMT) |
| commit | 9b6ff5e526baac15edcbe9f67cc80ba8131d6872 (patch) | |
| tree | 9f828e28ad786df4789c04b0667899c12cc249a2 /generic/tclIO.c | |
| parent | 5b91fa67c8cccc31135b73137bafa083173cf956 (diff) | |
| parent | d846192f407df5c67d831ff90a4a9a22d488b94b (diff) | |
| download | tcl-9b6ff5e526baac15edcbe9f67cc80ba8131d6872.zip tcl-9b6ff5e526baac15edcbe9f67cc80ba8131d6872.tar.gz tcl-9b6ff5e526baac15edcbe9f67cc80ba8131d6872.tar.bz2 | |
Repair linked list management in Tcl_DeleteCloseHandler().
CloseCallback struct used only locally. Remove from tclIO.h.
Diffstat (limited to 'generic/tclIO.c')
| -rw-r--r-- | generic/tclIO.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c index de7f228..40998cc 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -44,6 +44,18 @@ typedef struct ThreadSpecificData { static Tcl_ThreadDataKey dataKey; /* + * Structure to record a close callback. One such record exists for + * each close callback registered for a channel. + */ + +typedef struct CloseCallback { + Tcl_CloseProc *proc; /* The procedure to call. */ + ClientData clientData; /* Arbitrary one-word data to pass + * to the callback. */ + struct CloseCallback *nextPtr; /* For chaining close callbacks. */ +} CloseCallback; + +/* * Static functions in this file: */ @@ -563,6 +575,8 @@ Tcl_DeleteCloseHandler( if ((cbPtr->proc == proc) && (cbPtr->clientData == clientData)) { if (cbPrevPtr == NULL) { statePtr->closeCbPtr = cbPtr->nextPtr; + } else { + cbPrevPtr->nextPtr = cbPtr->nextPtr; } ckfree((char *) cbPtr); break; |
