Eggheads: utimers acting weird

kungfo0 at techmonkeys.org kungfo0 at techmonkeys.org
Sun Feb 15 17:57:45 CST 2004


What immediately jumps to my mind is, you're running two separate timers.  
And you're checking to make sure the 1st timer is ran only once (with your 
lsearch -regexp line), but you're not checking whether the 2nd timer is 
only running once.




On Fri, 13 Feb 2004, NeoN wrote:

> 
> While writing a script, I stumbled upon some problems with utimers.  I
> have reduced this to the code pasted below.  The dcc binds are just
> included for easier testing.
> 
> After the second execution of test_caller, there are 3 utimers running,
> while there should only be 2.  In the second execution [llength
> [utimers]] return 0, but there are utimers running.  The check for a
> running utimer fails of course, and a new utimer is started.
> 
> In the third execution however [llength [utimers]] returns 1, so now
> test_callee "sees" one of the utimers.
> 
> Calling test_caller or test_callee directly (eg: .tcl test_callee)
> does give the expected behaviour.
> 
> I have tested this on eggdrop v1.6.15 with Tcl v8.3.3
> 
> Am I overlooking something or is this a bug?
> 
> 
> The test code:
> 
> proc test_callee {} {
>     putlog "Before: [llength [utimers]]"
>     if {[lsearch -regexp [utimers] "test_callee"] == -1} {
>         putlog "Started new timer"
>         utimer 30 test_callee
>     }
>     putlog "After: [llength [utimers]]"
> }
> 
> proc test_caller {} {
>     putlog "Before call: [llength [utimers]]"
>     test_callee
>     putlog "After call: [llength [utimers]]"
>     utimer 25 "test_caller"            
> }
> 
> bind dcc n test test
> bind dcc n ut ut
> bind dcc n kt kt
> 
> # start
> proc test {handle idx text} {
>     utimer 1 test_caller
> }
> 
> # show utimers
> proc ut {handle idx text} {
>     putdcc $idx "timers: [llength [utimers]]"
>     foreach t [utimers] {
>         putdcc $idx "$t"   
>     }
> }
> 
> # kill utimers
> proc kt {handle idx text} {
>     foreach t [utimers] {
>         if {[string match "test_*" [lindex $t 1]]} {
>             killutimer [lindex $t 2]
>         }
>     }
> }
> 
> 
> 




More information about the Eggheads mailing list