Tcl Library Source Code

Check-in [cdb4dbfa45]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fix for cron. A task with no coroutine, and no command, and no anything else causes thrashing as an idle task Updated the versions of cron and processman and nettool called by modules within tcllib
Timelines: family | ancestors | descendants | both | odie
Files: files | file ages | folders
SHA1: cdb4dbfa458f244e15d627ee5b74255adfc892ac
User & Date: tne 2016-07-21 21:55:21
Context
2016-07-22
20:38
Added a fence to prevent recursive calls to cron::wait check-in: 055c6dd568 user: tne tags: odie
2016-07-21
21:55
Fix for cron. A task with no coroutine, and no command, and no anything else causes thrashing as an idle task Updated the versions of cron and processman and nettool called by modules within tcllib check-in: cdb4dbfa45 user: tne tags: odie
20:47
Checking in a new version of Cron. This one does a much more comprehensive job of managing objects and coroutines check-in: 1d00b41109 user: tne tags: odie
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to modules/cron/cron.tcl.

360
361
362
363
364
365
366




367
368
369
370
371
372
373
374
375
376
        continue
      }
      if {$::cron::trace > 2} {
        puts [list RUNNING $task [task info $task]]
      }
      dict set processTable($task) running 1
      set coro [dict get $processTable($task) coroutine]




      if {$coro ne {}} {
        if {[info command $coro] eq {}} {
          set command [dict get $processTable($task) command]
          set object [dict get $processTable($task) object]
          # Trigger coroutine again if a command was given
          # If this coroutine is associated with an object, ensure
          # the object still exists before invoking its method
          if {$command eq {} || ($object ne {} && [info command $object] eq {})} {
            lappend cancellist $task
            dict set processTable($task) running 0







>
>
>
>
|

<







360
361
362
363
364
365
366
367
368
369
370
371
372

373
374
375
376
377
378
379
        continue
      }
      if {$::cron::trace > 2} {
        puts [list RUNNING $task [task info $task]]
      }
      dict set processTable($task) running 1
      set coro [dict get $processTable($task) coroutine]
      set command [dict get $processTable($task) command]
      if {$command eq {} && $coro eq {}} {
        # Task has nothing to do. Slot it for destruction
        lappend cancellist $task
      } elseif {$coro ne {}} {
        if {[info command $coro] eq {}} {

          set object [dict get $processTable($task) object]
          # Trigger coroutine again if a command was given
          # If this coroutine is associated with an object, ensure
          # the object still exists before invoking its method
          if {$command eq {} || ($object ne {} && [info command $object] eq {})} {
            lappend cancellist $task
            dict set processTable($task) running 0

Changes to modules/processman/processman.tcl.

1
2
3
4
5
6
7
8
9
10
11
12
###
# IRM External Process Manager
###

package require cron 1.1

::namespace eval ::processman {}

if { $::tcl_platform(platform) eq "windows" } {
  package require twapi
} else {
  ###




|







1
2
3
4
5
6
7
8
9
10
11
12
###
# IRM External Process Manager
###

package require cron 2.0

::namespace eval ::processman {}

if { $::tcl_platform(platform) eq "windows" } {
  package require twapi
} else {
  ###

Changes to modules/udpcluster/udpcluster.tcl.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- tcl -*-
# ### ### ### ######### ######### #########
## Name Service - Cluster

# ### ### ### ######### ######### #########
## Requirements

package require Tcl 8.5
package require comm             ; # Generic message transport
package require interp           ; # Interpreter helpers.
package require logger           ; # Tracing internal activity
package require uuid
package require cron
package require nettool 0.4
package require udp
package require dicttool

namespace eval ::comm {}
::namespace eval ::cluster {}

###












|
|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- tcl -*-
# ### ### ### ######### ######### #########
## Name Service - Cluster

# ### ### ### ######### ######### #########
## Requirements

package require Tcl 8.5
package require comm             ; # Generic message transport
package require interp           ; # Interpreter helpers.
package require logger           ; # Tracing internal activity
package require uuid
package require cron 2.0
package require nettool 0.5.1
package require udp
package require dicttool

namespace eval ::comm {}
::namespace eval ::cluster {}

###