summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
authordgp@users.sourceforge.net <dgp>2013-02-25 18:17:26 (GMT)
committerdgp@users.sourceforge.net <dgp>2013-02-25 18:17:26 (GMT)
commit639fd150b50efe13e23e4d7f94749dee53e13543 (patch)
tree1f21407e48e559afb20fde4343a3d1ceba744351 /generic/tclIO.c
parente9d3e3ec7e3908f258cabddb5823fbc37962e074 (diff)
parent9b6ff5e526baac15edcbe9f67cc80ba8131d6872 (diff)
downloadtcl-639fd150b50efe13e23e4d7f94749dee53e13543.zip
tcl-639fd150b50efe13e23e4d7f94749dee53e13543.tar.gz
tcl-639fd150b50efe13e23e4d7f94749dee53e13543.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.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c
index f340d59..a7569f4 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:
*/
@@ -695,6 +707,8 @@ Tcl_DeleteCloseHandler(
if ((cbPtr->proc == proc) && (cbPtr->clientData == clientData)) {
if (cbPrevPtr == NULL) {
statePtr->closeCbPtr = cbPtr->nextPtr;
+ } else {
+ cbPrevPtr->nextPtr = cbPtr->nextPtr;
}
ckfree(cbPtr);
break;