summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2011-07-15 17:56:06 (GMT)
committerdgp <dgp@users.sourceforge.net>2011-07-15 17:56:06 (GMT)
commitff87b46b5269cbd4def059244e47ec2db336e166 (patch)
treec42b201c8a8628a1db61a8fd97a3a30ab418c479
parentf10d6c78e39de65787b2bb9652689feeca1b0b31 (diff)
parentc4e6823834ff315ac0cbc1dab5f3749482696aab (diff)
downloadtcl-ff87b46b5269cbd4def059244e47ec2db336e166.zip
tcl-ff87b46b5269cbd4def059244e47ec2db336e166.tar.gz
tcl-ff87b46b5269cbd4def059244e47ec2db336e166.tar.bz2
Avoid segfaults when RecordByteCodeStats() is called in a deleted interp.
-rw-r--r--ChangeLog3
-rw-r--r--generic/tclCompile.c5
2 files changed, 8 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 80ca332..f9dbc26 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2011-07-15 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCompile.c: Avoid segfaults when RecordByteCodeStats()
+ is called in a deleted interp.
+
* generic/tclCompile.c: [Bug 467523, 3357771] Prevent circular
references in values with ByteCode intreps. They can lead to
memory leaks.
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index 8aedf95..ae633ea 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -4572,6 +4572,11 @@ RecordByteCodeStats(
Interp *iPtr = (Interp *) *codePtr->interpHandle;
register ByteCodeStats *statsPtr = &iPtr->stats;
+ if (iPtr == NULL) {
+ /* Avoid segfaulting in case we're called in a deleted interp */
+ return;
+ }
+
statsPtr->numCompilations++;
statsPtr->totalSrcBytes += (double) codePtr->numSrcBytes;
statsPtr->totalByteCodeBytes += (double) codePtr->structureSize;