Tcl Source Code

Changes On Branch aku-mem-debug-allow-regular
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch aku-mem-debug-allow-regular Excluding Merge-Ins

This is equivalent to a diff from 40cc6d8f3b to c8a862480b

2015-05-27
18:25
Make tweak to the mem-debug tracking official. It is now again possible to use regular packages with... check-in: 38ddcfe658 user: andreask tags: core-8-5-branch
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
17:08
Allow URLs that don't have a path, but a query, e.g. http://example.com?foo=bar and bump http to 2.... check-in: e47216d06d user: max tags: core-8-5-branch
07:07
Make Tcl_EvalObj/Tcl_GlobalEvalObj a macro always, not only when using stubs. check-in: 45d8edf1bb user: jan.nijtmans tags: trunk
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
2013-04-03
20:48
some more "ignore-glob" patterns check-in: ce6095ab91 user: jan.nijtmans tags: core-8-5-branch

Changes to generic/tclObj.c.

1318
1319
1320
1321
1322
1323
1324

































1325
1326
1327
1328
1329
1330
1331

    /*
     * This macro declares a variable, so must come here...
     */

    ObjInitDeletionContext(context);


































    /*
     * Check for a double free of the same value.  This is slightly tricky
     * because it is customary to free a Tcl_Obj when its refcount falls
     * either from 1 to 0, or from 0 to -1.  Falling from -1 to -2, though,
     * and so on, is always a sign of a botch in the caller.
     */
    if (objPtr->refCount < -1) {







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
1357
1358
1359
1360
1361
1362
1363
1364

    /*
     * This macro declares a variable, so must come here...
     */

    ObjInitDeletionContext(context);

# 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

    /*
     * Check for a double free of the same value.  This is slightly tricky
     * because it is customary to free a Tcl_Obj when its refcount falls
     * either from 1 to 0, or from 0 to -1.  Falling from -1 to -2, though,
     * and so on, is always a sign of a botch in the caller.
     */
    if (objPtr->refCount < -1) {
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
	}
	hPtr = Tcl_FindHashEntry(tablePtr, (char *) objPtr);
	if (!hPtr) {
	    Tcl_Panic("%s%s",
		    "Trying to decr ref count of "
		    "Tcl_Obj allocated in another thread");
	}

	/*
	 * If the Tcl_Obj is going to be deleted, remove the entry.
	 */

	if ((objPtr->refCount - 1) <= 0) {
	    ObjData *objData = Tcl_GetHashValue(hPtr);

	    if (objData != NULL) {
		ckfree((char *) objData);
	    }

	    Tcl_DeleteHashEntry(hPtr);
	}
    }
# endif
#endif
    if (--(objPtr)->refCount <= 0) {
	TclFreeObj(objPtr);
    }
}







<
<
<
<
<
<
<
<
<
<
<
<
<
<







3744
3745
3746
3747
3748
3749
3750














3751
3752
3753
3754
3755
3756
3757
	}
	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);
    }
}