Browse Source

shellfilter/shellthread work

master
Julian Noble 2 weeks ago
parent
commit
7b5fee190f
  1. 4
      src/modules/shellfilter-999999.0a1.0.tm
  2. 14
      src/modules/shellthread-999999.0a1.0.tm

4
src/modules/shellfilter-999999.0a1.0.tm

@ -46,7 +46,7 @@ tcl::namespace::eval shellfilter::log {
lappend sourcelist $tag lappend sourcelist $tag
} }
#note new_worker #review new_worker/assign_worker?
set worker_tid [shellthread::manager::new_worker $tag $settingsdict] set worker_tid [shellthread::manager::new_worker $tag $settingsdict]
#puts stderr "shellfilter::log::open this_threadid: [thread::id] tag: $tag worker_tid: $worker_tid" #puts stderr "shellfilter::log::open this_threadid: [thread::id] tag: $tag worker_tid: $worker_tid"
return $worker_tid return $worker_tid
@ -1761,7 +1761,7 @@ namespace eval shellfilter::stack {
dict set transform_record -obj $obj dict set transform_record -obj $obj
dict set transform_record -note "insert_transform-with-aside" dict set transform_record -note "insert_transform-with-aside"
lappend stack $transform_record lappend stack $transform_record
#add back poplist *except* the one we transferred into -aside (if we were able) # add back poplist *except* the one we transferred into -aside (if we were able)
foreach p [lrange $poplist $put_aside end] { foreach p [lrange $poplist $put_aside end] {
set t [dict get $p -transform] set t [dict get $p -transform]
set tsettings [dict get $p -settings] set tsettings [dict get $p -settings]

14
src/modules/shellthread-999999.0a1.0.tm

@ -493,7 +493,11 @@ namespace eval shellthread::manager {
dict set workers $sourcetag $winfo ;#writeback dict set workers $sourcetag $winfo ;#writeback
return [dict get $winfo tid] return [dict get $winfo tid]
} else { } else {
error "shellthread::manager::new_worker error: tag $sourcetag already has a worker with a different configuration\nexisting: $existing_settings\nattempted: $settingsdict" set emsg "shellthread::manager::new_worker error: tag $sourcetag already has a worker with a different configuration\n"
append emsg "existing: $existing_settings\n"
append emsg "attempted: $settingsdict\n"
append emsg "workers info: $winfo"
error $emsg
} }
} }
} }
@ -514,7 +518,9 @@ namespace eval shellthread::manager {
if {[llength $free_threads]} { if {[llength $free_threads]} {
#todo - re-use from tail - as most likely to have been doing similar work?? review #todo - re-use from tail - as most likely to have been doing similar work?? review
set free_threads [lassign $free_threads tidworker] #set free_threads [lassign $free_threads tidworker]
set tidworker [lpop free_threads 0]
#todo - keep track of real ts_start of free threads... kill when too old #todo - keep track of real ts_start of free threads... kill when too old
set winfo [dict create tid $tidworker list_client_tids [list $tidclient] ts_start $ts_start ts_end_list [list] workertype [dict get $settingsdict -workertype]] set winfo [dict create tid $tidworker list_client_tids [list $tidclient] ts_start $ts_start ts_end_list [list] workertype [dict get $settingsdict -workertype]]
#puts stderr "shellfilter::new_worker Re-using free worker thread: $tidworker with tag $sourcetag" #puts stderr "shellfilter::new_worker Re-using free worker thread: $tidworker with tag $sourcetag"
@ -690,6 +696,8 @@ namespace eval shellthread::manager {
foreach workertid $subscriberless_workers { foreach workertid $subscriberless_workers {
if {$workertid ni $shuttingdown_workers} { if {$workertid ni $shuttingdown_workers} {
if {$workertid ni $free_threads && $workertid ne "noop"} { if {$workertid ni $free_threads && $workertid ne "noop"} {
thread::send $workertid {set ::shellthread::worker::settings {}}
#todo - log freeing up of thread
lappend free_threads $workertid lappend free_threads $workertid
} }
} }
@ -709,7 +717,9 @@ namespace eval shellthread::manager {
} }
return $taginfo_list return $taginfo_list
} }
proc get_tag_config {tag} { proc get_tag_config {tag} {
#review
variable workers variable workers
if {![dict exists $workers $tag]} { if {![dict exists $workers $tag]} {
error "shellthread::manager::get_tag_config error no existing tag $tag" error "shellthread::manager::get_tag_config error no existing tag $tag"

Loading…
Cancel
Save