aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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