Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Moved Tcl_Obj* objThreadMap release tracking to a location where regular packages will call through, enabling their full tracking by the core, and thus avoiding the "expected to create new entry for object map" panic seen otherwise. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | aku-mem-debug-allow-regular |
Files: | files | file ages | folders |
SHA1: |
1f5c53bf5d2b0deaa7e52fde8f1a2860 |
User & Date: | andreask 2015-05-22 20:21:48 |
Context
2015-05-22
| ||
23:26 | Minor compilation issue fix, make sure variable declaration (via macro) is first. Closed-Leaf check-in: c8a862480b user: mistachkin tags: aku-mem-debug-allow-regular | |
20:21 | Moved Tcl_Obj* objThreadMap release tracking to a location where regular packages will call through,... check-in: 1f5c53bf5d user: andreask tags: aku-mem-debug-allow-regular | |
2013-04-04
| ||
07:03 | Make Tcl_EvalObj/Tcl_GlobalEvalObj a macro always, not only when using stubs. check-in: 40cc6d8f3b user: jan.nijtmans tags: core-8-5-branch | |
Changes
Changes to generic/tclObj.c.
︙ | ︙ | |||
1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 | #ifdef TCL_MEM_DEBUG void TclFreeObj( register Tcl_Obj *objPtr) /* The object to be freed. */ { register Tcl_ObjType *typePtr = objPtr->typePtr; /* * This macro declares a variable, so must come here... */ ObjInitDeletionContext(context); | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 | #ifdef TCL_MEM_DEBUG void TclFreeObj( register Tcl_Obj *objPtr) /* The object to be freed. */ { register Tcl_ObjType *typePtr = objPtr->typePtr; # ifdef TCL_THREADS /* * Check to make sure that the Tcl_Obj was allocated by the current * thread. Don't do this check when shutting down since thread local * storage can be finalized before the last Tcl_Obj is freed. */ if (!TclInExit()) { Tcl_HashTable *tablePtr; Tcl_HashEntry *hPtr; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); tablePtr = tsdPtr->objThreadMap; if (!tablePtr) { Tcl_Panic("TclFreeObj: object table not initialized"); } hPtr = Tcl_FindHashEntry(tablePtr, (char *) objPtr); if (hPtr) { /* * As the Tcl_Obj is going to be deleted we remove the entry. */ ObjData *objData = Tcl_GetHashValue(hPtr); if (objData != NULL) { ckfree((char *) objData); } Tcl_DeleteHashEntry(hPtr); } } # endif /* * This macro declares a variable, so must come here... */ ObjInitDeletionContext(context); |
︙ | ︙ | |||
3711 3712 3713 3714 3715 3716 3717 | } hPtr = Tcl_FindHashEntry(tablePtr, (char *) objPtr); if (!hPtr) { Tcl_Panic("%s%s", "Trying to decr ref count of " "Tcl_Obj allocated in another thread"); } | < < < < < < < < < < < < < < | 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 | } hPtr = Tcl_FindHashEntry(tablePtr, (char *) objPtr); if (!hPtr) { Tcl_Panic("%s%s", "Trying to decr ref count of " "Tcl_Obj allocated in another thread"); } } # endif #endif if (--(objPtr)->refCount <= 0) { TclFreeObj(objPtr); } } |
︙ | ︙ |