aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-09-28 07:54:23 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:02:55 +1000
commit0da01d15d29b6a97e2ec31591a292a0084c6fc07 (patch)
tree041681443164029baea9bf0a2109df2448a40e86
parentae5a40b0d0709114b2a18f90855c03df1d7100cb (diff)
downloadjimtcl-0da01d15d29b6a97e2ec31591a292a0084c6fc07.zip
jimtcl-0da01d15d29b6a97e2ec31591a292a0084c6fc07.tar.gz
jimtcl-0da01d15d29b6a97e2ec31591a292a0084c6fc07.tar.bz2
Fix reference counting of stack trace in 'error'
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c1
-rw-r--r--regtest.tcl8
2 files changed, 9 insertions, 0 deletions
diff --git a/jim.c b/jim.c
index 434b9e5..a23e229 100644
--- a/jim.c
+++ b/jim.c
@@ -4911,6 +4911,7 @@ static void JimAppendStackTrace(Jim_Interp *interp, const char *procname,
}
if (Jim_IsShared(interp->stackTrace)) {
+ Jim_DecrRefCount(interp, interp->stackTrace);
interp->stackTrace = Jim_DuplicateObj(interp, interp->stackTrace);
Jim_IncrRefCount(interp->stackTrace);
}
diff --git a/regtest.tcl b/regtest.tcl
index 05f0ac6..8f541ba 100644
--- a/regtest.tcl
+++ b/regtest.tcl
@@ -91,6 +91,14 @@ puts "TEST 13 PASSED"
eval "{*}{}"
puts "TEST 14 PASSED"
+# REGTEST 15
+# 24 Feb 2010 - bad reference counting of the stack trace in 'error'
+proc a {msg stack} {
+ tailcall error $msg $stack
+}
+catch {fail} msg opts
+catch {a $msg $opts(-errorinfo)}
+
# TAKE THE FOLLOWING puts AS LAST LINE