Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | [3493120] Plug memory leak in thread exit. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | core-8-5-branch |
Files: | files | file ages | folders |
SHA1: |
18257b2f89a299b885b2cc0ea6de31a4 |
User & Date: | dgp 2014-04-23 18:25:27 |
Context
2014-04-29
| ||
16:36 | Fix bug exposed when buffer recycling is disabled. check-in: 9823e74a67 user: dgp tags: core-8-5-branch | |
2014-04-25
| ||
20:12 | Disable buffer recycling to expose bugs for fixing. check-in: e9c2ad7207 user: dgp tags: dgp-no-buffer-recycle | |
2014-04-24
| ||
18:14 | merge 8.5 check-in: 31f56dd77d user: dgp tags: dgp-read-bytes | |
04:34 | [3493120] Plug memory leak in thread exit. check-in: 6b5f70a82f user: dgp tags: trunk | |
2014-04-23
| ||
18:25 | [3493120] Plug memory leak in thread exit. check-in: 18257b2f89 user: dgp tags: core-8-5-branch | |
09:18 | *nix segfault cleared: we should reset a thread key after freeing of alloc cache (in tclUnixThrd.c) Closed-Leaf check-in: 1dc6ea5ab2 user: sebres tags: bug-3493120 | |
2014-04-22
| ||
14:57 | Add refcounting and preservation to [testchannel transform] to stop segfault in test iogt-2.4. check-in: 1f873e8005 user: dgp tags: core-8-5-branch | |
Changes
Changes to generic/tclInt.h.
︙ | ︙ | |||
2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 | MODULE_SCOPE void TclFinalizeLock(void); MODULE_SCOPE void TclFinalizeMemorySubsystem(void); MODULE_SCOPE void TclFinalizeNotifier(void); MODULE_SCOPE void TclFinalizeObjects(void); MODULE_SCOPE void TclFinalizePreserve(void); MODULE_SCOPE void TclFinalizeSynchronization(void); MODULE_SCOPE void TclFinalizeThreadAlloc(void); MODULE_SCOPE void TclFinalizeThreadData(void); MODULE_SCOPE void TclFinalizeThreadObjects(void); MODULE_SCOPE double TclFloor(mp_int *a); MODULE_SCOPE void TclFormatNaN(double value, char *buffer); MODULE_SCOPE int TclFSFileAttrIndex(Tcl_Obj *pathPtr, const char *attributeName, int *indexPtr); MODULE_SCOPE void TclFSUnloadTempFile(Tcl_LoadHandle loadHandle); | > | 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 | MODULE_SCOPE void TclFinalizeLock(void); MODULE_SCOPE void TclFinalizeMemorySubsystem(void); MODULE_SCOPE void TclFinalizeNotifier(void); MODULE_SCOPE void TclFinalizeObjects(void); MODULE_SCOPE void TclFinalizePreserve(void); MODULE_SCOPE void TclFinalizeSynchronization(void); MODULE_SCOPE void TclFinalizeThreadAlloc(void); MODULE_SCOPE void TclFinalizeThreadAllocThread(void); MODULE_SCOPE void TclFinalizeThreadData(void); MODULE_SCOPE void TclFinalizeThreadObjects(void); MODULE_SCOPE double TclFloor(mp_int *a); MODULE_SCOPE void TclFormatNaN(double value, char *buffer); MODULE_SCOPE int TclFSFileAttrIndex(Tcl_Obj *pathPtr, const char *attributeName, int *indexPtr); MODULE_SCOPE void TclFSUnloadTempFile(Tcl_LoadHandle loadHandle); |
︙ | ︙ |
Changes to generic/tclThread.c.
︙ | ︙ | |||
334 335 336 337 338 339 340 | } /* *---------------------------------------------------------------------- * * TclFinalizeThreadData -- * | | > | > > > | 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 | } /* *---------------------------------------------------------------------- * * TclFinalizeThreadData -- * * This function cleans up the thread-local storage. Secondary, it cleans * thread alloc cache. * This is called once for each thread before thread exits. * * Results: * None. * * Side effects: * Frees up all thread local storage. * *---------------------------------------------------------------------- */ void TclFinalizeThreadData(void) { TclpFinalizeThreadDataThread(); #if defined(TCL_THREADS) && defined(USE_THREAD_ALLOC) TclFinalizeThreadAllocThread(); #endif } /* *---------------------------------------------------------------------- * * TclFinalizeSynchronization -- * |
︙ | ︙ |
Changes to generic/tclThreadAlloc.c.
︙ | ︙ | |||
1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 | objLockPtr = NULL; TclpFreeAllocMutex(listLockPtr); listLockPtr = NULL; TclpFreeAllocCache(NULL); } #else /* !(TCL_THREADS && USE_THREAD_ALLOC) */ /* *---------------------------------------------------------------------- * * Tcl_GetMemoryInfo -- * | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 | objLockPtr = NULL; TclpFreeAllocMutex(listLockPtr); listLockPtr = NULL; TclpFreeAllocCache(NULL); } /* *---------------------------------------------------------------------- * * TclFinalizeThreadAllocThread -- * * This procedure is used to destroy single thread private resources used * in this file. * Called in TclpFinalizeThreadData when a thread exits (Tcl_FinalizeThread). * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void TclFinalizeThreadAllocThread(void) { Cache *cachePtr = TclpGetAllocCache(); if (cachePtr != NULL) { TclpFreeAllocCache(cachePtr); } } #else /* !(TCL_THREADS && USE_THREAD_ALLOC) */ /* *---------------------------------------------------------------------- * * Tcl_GetMemoryInfo -- * |
︙ | ︙ |
Changes to unix/tclUnixThrd.c.
︙ | ︙ | |||
810 811 812 813 814 815 816 817 818 819 820 821 822 823 | { if (ptr != NULL) { /* * Called by the pthread lib when a thread exits */ TclFreeAllocCache(ptr); } else if (initialized) { /* * Called by us in TclFinalizeThreadAlloc() during the library * finalization initiated from Tcl_Finalize() */ | > | 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 | { if (ptr != NULL) { /* * Called by the pthread lib when a thread exits */ TclFreeAllocCache(ptr); pthread_setspecific(key, NULL); } else if (initialized) { /* * Called by us in TclFinalizeThreadAlloc() during the library * finalization initiated from Tcl_Finalize() */ |
︙ | ︙ |