Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Leak of ReflectedTransformMap. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e993e51faf3052e4cac7f91b615b841c |
User & Date: | dgp 2011-08-29 14:16:07 |
Context
2011-08-29
| ||
23:24 | Put back the check for server sockets (bug #3394732). check-in: 0722843420 user: max tags: trunk | |
20:41 | Work in progress plugging thread finalization memory leaks. check-in: b34df31421 user: dgp tags: bug-3397515 | |
14:16 | Leak of ReflectedTransformMap. check-in: e993e51faf user: dgp tags: trunk | |
10:43 | Fix eval's faulty objProc, it was actually an nreProc [Bug 3399564]. Thanks to Joe Mistachki... check-in: 6fde6aa738 user: mig tags: trunk | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2011-08-27 Don Porter <[email protected]> * generic/tclStringObj.c: [RFE 3396731] Revise the [string reverse] * tests/string.test: implementation to operate on the representation that comes in, avoid conversion to other reps. 2011-08-23 Don Porter <[email protected]> | > > > > | 1 2 3 4 5 6 7 8 9 10 11 | 2011-08-29 Don Porter <[email protected]> * generic/tclIORTrans.c: Leak of ReflectedTransformMap. 2011-08-27 Don Porter <[email protected]> * generic/tclStringObj.c: [RFE 3396731] Revise the [string reverse] * tests/string.test: implementation to operate on the representation that comes in, avoid conversion to other reps. 2011-08-23 Don Porter <[email protected]> |
︙ | ︙ |
Changes to generic/tclIORTrans.c.
︙ | ︙ | |||
2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 | resultPtr->evPtr = NULL; resultPtr->result = TCL_ERROR; ForwardSetStaticError(paramPtr, msg_send_dstlost); Tcl_ConditionNotify(&resultPtr->done); } /* * Get the map of all channels handled by the current thread. This is a * ReflectedTransformMap, but on a per-thread basis, not per-interp. Go * through the channels and remove all which were handled by this * interpreter. They have already been marked as dead. */ | > | 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 | resultPtr->evPtr = NULL; resultPtr->result = TCL_ERROR; ForwardSetStaticError(paramPtr, msg_send_dstlost); Tcl_ConditionNotify(&resultPtr->done); } Tcl_MutexUnlock(&rtForwardMutex); /* * Get the map of all channels handled by the current thread. This is a * ReflectedTransformMap, but on a per-thread basis, not per-interp. Go * through the channels and remove all which were handled by this * interpreter. They have already been marked as dead. */ |
︙ | ︙ | |||
2211 2212 2213 2214 2215 2216 2217 | */ continue; } Tcl_DeleteHashEntry(hPtr); } | < < | 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 | */ continue; } Tcl_DeleteHashEntry(hPtr); } #endif } #ifdef TCL_THREADS /* *---------------------------------------------------------------------- * |
︙ | ︙ | |||
2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 | resultPtr->evPtr = NULL; resultPtr->result = TCL_ERROR; ForwardSetStaticError(paramPtr, msg_send_dstlost); Tcl_ConditionNotify(&resultPtr->done); } /* * Get the map of all channels handled by the current thread. This is a * ReflectedTransformMap, but on a per-thread basis, not per-interp. Go * through the channels, remove all, mark them as dead. */ rtmPtr = GetThreadReflectedTransformMap(); for (hPtr = Tcl_FirstHashEntry(&rtmPtr->map, &hSearch); hPtr != NULL; hPtr = Tcl_FirstHashEntry(&rtmPtr->map, &hSearch)) { ReflectedTransform *rtPtr = Tcl_GetHashValue(hPtr); rtPtr->interp = NULL; Tcl_DeleteHashEntry(hPtr); } | > | < | 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 | resultPtr->evPtr = NULL; resultPtr->result = TCL_ERROR; ForwardSetStaticError(paramPtr, msg_send_dstlost); Tcl_ConditionNotify(&resultPtr->done); } Tcl_MutexUnlock(&rtForwardMutex); /* * Get the map of all channels handled by the current thread. This is a * ReflectedTransformMap, but on a per-thread basis, not per-interp. Go * through the channels, remove all, mark them as dead. */ rtmPtr = GetThreadReflectedTransformMap(); for (hPtr = Tcl_FirstHashEntry(&rtmPtr->map, &hSearch); hPtr != NULL; hPtr = Tcl_FirstHashEntry(&rtmPtr->map, &hSearch)) { ReflectedTransform *rtPtr = Tcl_GetHashValue(hPtr); rtPtr->interp = NULL; Tcl_DeleteHashEntry(hPtr); } ckfree(rtmPtr); } static void ForwardOpToOwnerThread( ReflectedTransform *rtPtr, /* Channel instance */ ForwardedOperation op, /* Forwarded driver operation */ const void *param) /* Arguments */ |
︙ | ︙ |