Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | 3357771 Prevent circular references in values with ByteCode intreps. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a26a1204ddcf0c1dfa4b0575928b742b |
User & Date: | dgp 2011-07-15 14:55:07 |
Context
2011-07-15
| ||
17:56 | Avoid segfaults when RecordByteCodeStats() is called in a deleted interp. check-in: 609c597cb2 user: dgp tags: trunk | |
14:55 | 3357771 Prevent circular references in values with ByteCode intreps. check-in: a26a1204dd user: dgp tags: trunk | |
11:45 | [Bug 3365156]: Remove stray refcount bump that caused a memory leak. check-in: c02169bafa user: dkf tags: trunk | |
Changes
Changes to ChangeLog.
1 2 3 4 5 6 7 | 2011-07-14 Donal K. Fellows <[email protected]> * generic/tclOOCall.c (TclOORenderCallChain): [Bug 3365156]: Remove stray refcount bump that caused a memory leak. 2011-07-12 Don Porter <[email protected]> | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | 2011-07-15 Don Porter <[email protected]> * generic/tclCompile.c: [Bug 467523, 3357771] Prevent circular references in values with ByteCode intreps. They can lead to memory leaks. 2011-07-14 Donal K. Fellows <[email protected]> * generic/tclOOCall.c (TclOORenderCallChain): [Bug 3365156]: Remove stray refcount bump that caused a memory leak. 2011-07-12 Don Porter <[email protected]> |
︙ | ︙ |
Changes to generic/tclCompile.c.
︙ | ︙ | |||
2439 2440 2441 2442 2443 2444 2445 | p += sizeof(ByteCode); codePtr->codeStart = p; memcpy(p, envPtr->codeStart, (size_t) codeBytes); p += TCL_ALIGN(codeBytes); /* align object array */ codePtr->objArrayPtr = (Tcl_Obj **) p; for (i = 0; i < numLitObjects; i++) { | > > > > > > > > > > > | > | 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 | p += sizeof(ByteCode); codePtr->codeStart = p; memcpy(p, envPtr->codeStart, (size_t) codeBytes); p += TCL_ALIGN(codeBytes); /* align object array */ codePtr->objArrayPtr = (Tcl_Obj **) p; for (i = 0; i < numLitObjects; i++) { if (objPtr == envPtr->literalArrayPtr[i].objPtr) { /* * Prevent circular reference where the bytecode intrep of * a value contains a literal which is that same value. * If this is allowed to happen, refcount decrements may not * reach zero, and memory may leak. Bugs 467523, 3357771 */ codePtr->objArrayPtr[i] = Tcl_DuplicateObj(objPtr); Tcl_IncrRefCount(codePtr->objArrayPtr[i]); Tcl_DecrRefCount(objPtr); } else { codePtr->objArrayPtr[i] = envPtr->literalArrayPtr[i].objPtr; } } p += TCL_ALIGN(objArrayBytes); /* align exception range array */ if (exceptArrayBytes > 0) { codePtr->exceptArrayPtr = (ExceptionRange *) p; memcpy(p, envPtr->exceptArrayPtr, (size_t) exceptArrayBytes); } else { |
︙ | ︙ |