From: <ro...@us...> - 2013-07-31 16:58:44
|
Revision: 3117 http://sourceforge.net/p/nscldaq/code/3117 Author: ron-fox Date: 2013-07-31 16:58:31 +0000 (Wed, 31 Jul 2013) Log Message: ----------- * Migrate the waitservice into the evbcallouts code. * Log recent changes in change log. Modified Paths: -------------- branches/nscldaq-10.2-001-development/ChangeLog branches/nscldaq-10.2-001-development/daq/eventbuilder/evbRdoCallouts.tcl Modified: branches/nscldaq-10.2-001-development/ChangeLog =================================================================== --- branches/nscldaq-10.2-001-development/ChangeLog 2013-07-30 14:46:20 UTC (rev 3116) +++ branches/nscldaq-10.2-001-development/ChangeLog 2013-07-31 16:58:31 UTC (rev 3117) @@ -382,3 +382,5 @@ - Support CEvent segment onEnd method. 10.2-004 - Some clean up of dead code. + - Ensure SBSReadout exits when stdin gets lost. + - Migrate the service wait code into the evbcallouts standard script. Modified: branches/nscldaq-10.2-001-development/daq/eventbuilder/evbRdoCallouts.tcl =================================================================== --- branches/nscldaq-10.2-001-development/daq/eventbuilder/evbRdoCallouts.tcl 2013-07-30 14:46:20 UTC (rev 3116) +++ branches/nscldaq-10.2-001-development/daq/eventbuilder/evbRdoCallouts.tcl 2013-07-31 16:58:31 UTC (rev 3117) @@ -26,7 +26,7 @@ namespace eval ::EVBC { set initialized 0 - set pipefd ""; # Holds the fd to the pipe inot the evbpipeline + set pipefd ""; # Holds the fd to the pipe into the evbpipeline # Figure out where we are and hence the root of the daq system: # We assume we are in one directory below TclLibs in computing this: @@ -386,6 +386,7 @@ vwait EVBC::pipefd; # Will become empty on exit. } catch [list ringbuffer create $EVBC::destRing] msg; #ensure ring exists first. + puts "Note not being able to make ring buffer just means it's already there - don't panic" puts "Ringmsg $EVBC::destRing: $msg" # IF needed, create the destination and the intermediate ring: @@ -402,6 +403,7 @@ # If needed restart the EVB and disable the GUI...if it exists if {$EVBC::pipefd eq ""} { + EVBC::start \ -teering $teering \ -glombuild [$EVBC::applicationOptions cget -glombuild] \ @@ -411,9 +413,10 @@ if {$EVBC::guiFrame ne ""} { EVBC::_DisableGUI } - + set service ORDERER:$::tcl_platform(user) + EVBC::_WaitFor $service if {[info commands startEVBSources] ne ""} { - after 1000 startEVBSources + startEVBSources } } else { EVBC::reset @@ -450,7 +453,7 @@ # proc EVBC::_CheckPipeline {msgPrefix} { if {$EVBC::pipefd eq ""} { - error "$msgPrefix the event buider pipleline is not running" + error "$msgPrefix the event buider pipeline is not running" } } #------------------------------------------------------------------------------ @@ -486,7 +489,7 @@ proc EVBC::_HandleDataSourceInput {fd info id} { set text "$info ($id) " if {[eof $fd]} { - close $fd + catch {close $fd} append text "exited" } else { append text [gets $fd] @@ -760,3 +763,24 @@ } } +# waitFor +# +# Block until a specified service has registered with the +# port manager..then block a trifle longer to let the server. +# set up a listener on that service +# +# @param service - name of service to wait for. +proc EVBC::_WaitFor service { + set pm [::portAllocator create %AUTO%] + while 1 { + set services [$pm listPorts] + foreach server $services { + if {[lindex $server 1] eq $service} { + after 1000; # Let the server establish + $pm destroy + return + } + } + after 1000; # Wait before trying again. + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |