Tcl Library Source Code

Ticket Change Details
Login
Overview

Artifact ID: f0f5ad697611d444be4450cc0b82edc172317862
Ticket: dae6b527bc159a14c914c3d4eae46ac99a31b9be
Declaring a cron handler inside a cron command creates and infinte loop
User & Date: anonymous 2015-09-18 21:45:03
Changes

  1. assignee changed to: "nobody"
  2. closer changed to: "nobody"
  3. cmimetype changed to: "text/plain"
  4. comment changed to:
    Okay! So when defining cron handlers, you cannot nest them:
    =========================================================
    #! /usr/bin/tclsh
    package require cron
    
    # Done timer
    ::cron::in done 20 {incr ::done}
    
    # Ten second timer
    ::cron::in ten_seconds 10 {
        puts "10 second timer triggered!"
        # Nested timer
        ::cron::in five_seconds 5 {
            puts "5 seconds triggered!"
        }
    }
    
    vwait ::done
    =========================================================
    Gives us this output:
    =========================================================
    second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    10 second timer triggered!
    5 seconds triggered!
    [hooga@samserv01 ~]$
    =========================================================
    
    If you instead turn the inner cron statement to an after Xms y, it works as expected:
    =========================================================
    #! /usr/bin/tclsh
    package require cron
    
    # Done timer
    ::cron::in done 20 {incr ::done}
    
    # Ten second timer
    ::cron::in ten_seconds 10 {
        puts "10 second timer triggered!"
        # Nested timer
        after 5000 {
            puts "After 5 seconds triggered!"
        }
    }
    
    vwait ::done
    =========================================================
    
    =========================================================
    [hooga@samserv01 ~]$ ./cron.tcl
    10 second timer triggered!
    After 5 seconds triggered!
    [hooga@samserv01 ~]$
    =========================================================
    
  5. foundin changed to: "1.17"
  6. is_private changed to: "0"
  7. login: "anonymous"
  8. priority changed to: "5 Medium"
  9. private_contact changed to: "310273a9a9308c961b73e79a87acdf09488aea25"
  10. resolution changed to: "None"
  11. severity changed to: "Minor"
  12. status changed to: "Open"
  13. submitter changed to: "anonymous"
  14. subsystem changed to: "cron"
  15. title changed to:
    Declaring a cron handler inside a cron command creates and infinte loop
    
  16. type changed to: "Bug"