File tree Expand file tree Collapse file tree 1 file changed +23
-4
lines changed Expand file tree Collapse file tree 1 file changed +23
-4
lines changed Original file line number Diff line number Diff line change @@ -104,10 +104,8 @@ test event-10.1 {Tcl_Exit procedure} exec {
104104
105105test event-11.1 {Tcl_VwaitCmd procedure} -body {
106106 vwait
107- } -returnCodes error -match glob -result {wrong # args: should be "vwait* name"}
108- test event-11.2 {Tcl_VwaitCmd procedure} -body {
109- vwait a b
110- } -returnCodes error -match glob -result {wrong # args: should be "vwait* name"}
107+ } -returnCodes error -result {wrong # args: should be "vwait ?-signal? name ?script?"}
108+
111109test event-11.3 {Tcl_VwaitCmd procedure} jim {
112110 catch {unset x}
113111 set x 1
@@ -270,5 +268,26 @@ test event-14.2 {IPv6 socket stream.server client address} {jim socket ipv6} {
270268 list [join [lrange [split $addr6 :] 0 end-1] :]
271269} {{[::1]}}
272270
271+ test event-15.1 {vwait with script} {jim} {
272+ set x 0
273+ set result {}
274+
275+ local proc waiter {} {&x &result} {
276+ lappend result $x
277+ after 10 waiter
278+ }
279+
280+ after 10 waiter
281+ vwait done_waiter [lambda {} {&x} {
282+ # By using a lambda to capture a reference to x, we can
283+ # avoid a global variable. (done_waiter is not used)
284+ if {[incr x] >= 5} {
285+ break
286+ }
287+ }]
288+ # The vwait script iterates 5 times before break, so it will
289+ # cancel the event loop before waiter sets done_waiter
290+ list $x $result
291+ } {5 {0 1 2 3 4}}
273292
274293testreport
You can’t perform that action at this time.
0 commit comments