summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-06-16 17:09:19 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-06-16 17:09:19 (GMT)
commitc96e7bd80446fc3b4804b432ba53e8e31c980aef (patch)
treeb246cfb8b4bf276f5b3ab218e5b91595f9ffe29f /tests
parent4d5010d7a225fa33083901704e60339b088246bb (diff)
parent89399770a712e3ea5de6cbae35b5c85ae9fbe810 (diff)
downloadtcl-c96e7bd80446fc3b4804b432ba53e8e31c980aef.zip
tcl-c96e7bd80446fc3b4804b432ba53e8e31c980aef.tar.gz
tcl-c96e7bd80446fc3b4804b432ba53e8e31c980aef.tar.bz2
[16828b3744] [vwait] *must* successfully undo its variable trace, or else it risks corrupting memory. Namespace teardown complexities were giving the traces an opportunity to survive. Added another (arguably better) Tcl_UntraceVar() call to be sure we avoid this problem.
Diffstat (limited to 'tests')
-rw-r--r--tests/event.test28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/event.test b/tests/event.test
index 0d1b06c..207c799 100644
--- a/tests/event.test
+++ b/tests/event.test
@@ -583,6 +583,34 @@ test event-11.6 {Tcl_VwaitCmd procedure: round robin scheduling, same source} {
removeFile $test2file
list $x $y $z
} {3 3 done}
+test event-11.7 {Bug 16828b3744} {
+ after idle {
+ set ::t::v 1
+ namespace delete ::t
+ }
+ namespace eval ::t {
+ vwait ::t::v
+ }
+} {}
+test event-11.8 {Bug 16828b3744} -setup {
+ oo::class create A {
+ variable continue
+
+ method start {} {
+ after idle [self] destroy
+
+ set continue 0
+ vwait [namespace current]::continue
+ }
+ destructor {
+ set continue 1
+ }
+ }
+} -body {
+ [A new] start
+} -cleanup {
+ A destroy
+} -result {}
test event-12.1 {Tcl_UpdateCmd procedure} -returnCodes error -body {
update a b