From: Kevin K. <kev...@gm...> - 2010-02-01 13:40:39
|
Donal K. Fellows wrote: > On 01/02/2010 13:06, Alexandre Ferrieux wrote: >> (1) Am I allowed to commit the following 1-line addition to tclVar.c: >> >> @@ -5610,6 +5624,7 @@ FreeVarEntry( >> >> if (TclIsVarUndefined(varPtr)&& !TclIsVarTraced(varPtr) >> && (VarHashRefCount(varPtr) == 1)) { >> + varPtr->value.objPtr=(void *)0xdeadbeef; >> ckfree((char *) varPtr); >> } else { >> VarHashInvalidateEntry(varPtr); >> >> Rationale: it makes more reliable any time-bomb-like crash related to >> nasty reentrant trace issues like 2939073. Allows my fix for this bug >> to contain a test case. > > I'd be more inclined to put a NULL in there so that we're making the > clear statement that this memory cell isn't pointing to anything. YMMV. Let me make sure we're on the same page. Pointers in unused/freed objects should be set to NULL - the only constant that we know doesn't point to anything. Other data can be set to some arbitrary constant like 0xa1C0ffee or 0xBadDecaf. For speed, the intentional spoliation of freed data should perhaps be conditioned on being in a debug build. And it's a very good idea, go for it! Donal, do you agree? -- 73 de ke9tv/2, Kevin |