From: ian Date: Mon, 14 Jul 2008 21:16:54 +0000 (+0000) Subject: keep serchan open to defeat stupid kernel bug (EIO when opening a tty someone else... X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=38583f809f338d8bb0dd8f9b59668c01e043ce90;p=trains.git keep serchan open to defeat stupid kernel bug (EIO when opening a tty someone else is closing --- diff --git a/hostside/multiplex b/hostside/multiplex index 25b48cd..4284bc7 100755 --- a/hostside/multiplex +++ b/hostside/multiplex @@ -12,7 +12,7 @@ # $master socket # $permissions [list allow|super|deny $ipaddrhex $maskhex ...] # $realtime pipes -# $realtime_retry [list $serialchan $timeoutid $awaitedpongmsg|{} $buf] +# $realtime_retry [list $timeoutid $awaitedpongmsg|{} $buf] # $replay("$pri $key") $rhs $pri is \d\d; causes replay of "$key $rhs" # $detect0($seg) unset -> 1 or irrelevant; [after ...] # $conns($conn) 1 @@ -276,8 +276,8 @@ proc realtime-retry-reset {} { global realtime_retry if {![info exists realtime_retry]} return if {![llength $realtime_retry]} return - manyset $realtime_retry serchan timeoutid - catch { close $serchan } + manyset $realtime_retry timeoutid + fileevent $serchan readable {} after cancel $timeoutid set realtime_retry {} } @@ -291,19 +291,17 @@ proc realtime-retry-check {} { } proc realtime-retry-realtime-failed {} { - global realtime_retry dev_railway + global realtime_retry dev_railway serchan if {![info exists realtime_retry]} return if {[llength $realtime_retry]} { error "huh? $realtime_retry" } - set serchan [open $dev_railway {RDWR NOCTTY NONBLOCK}] - fconfigure $serchan -translation binary -buffering none -blocking 0 fileevent $serchan readable realtime-retry-serchan-readable set after [after 500 realtime-retry-send-ping] - set realtime_retry [list $serchan $after {} {}] + set realtime_retry [list $after {} {}] } proc realtime-retry-send-ping {} { - global realtime_retry urandom - manyset $realtime_retry serchan after pong buf + global realtime_retry urandom serchan + manyset $realtime_retry after pong buf set x [read $urandom 2] binary scan $x H* x if {[string length $x] != 4} { error "urandom short read `$x'" } @@ -313,12 +311,12 @@ proc realtime-retry-send-ping {} { #puts "