fix execute tcl procedure (correctly handle exit status of subprocesses that write to stderr but not as a failure)
This commit is contained in:
parent
fa33aca682
commit
96aa251ca0
|
|
@ -3389,6 +3389,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
||||||
if(argc > 2) tclvareval("simulate ", argv[2], NULL);
|
if(argc > 2) tclvareval("simulate ", argv[2], NULL);
|
||||||
else tcleval("simulate");
|
else tcleval("simulate");
|
||||||
}
|
}
|
||||||
|
Tcl_ResetResult(interp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* snap_wire
|
/* snap_wire
|
||||||
|
|
|
||||||
|
|
@ -216,28 +216,15 @@ proc execute_fileevent {id} {
|
||||||
# do not ask status for processes that close stdout/stderr, as eof might
|
# do not ask status for processes that close stdout/stderr, as eof might
|
||||||
# occur before process ends and following close blocks until process terminates.
|
# occur before process ends and following close blocks until process terminates.
|
||||||
fconfigure $execute(pipe,$id) -blocking 1
|
fconfigure $execute(pipe,$id) -blocking 1
|
||||||
set status 0
|
set exit_status 0
|
||||||
if { [ info tclversion] > 8.4} {
|
set catch_return [eval catch [list {close $execute(pipe,$id)} err] ]
|
||||||
set catch_return [eval catch [list {close $execute(pipe,$id)} err options] ]
|
|
||||||
} else {
|
|
||||||
set catch_return [eval catch [list {close $execute(pipe,$id)} err] ]
|
|
||||||
}
|
|
||||||
if {$catch_return} {
|
if {$catch_return} {
|
||||||
if {[info tclversion] > 8.4} {
|
global errorCode
|
||||||
set details [dict get $options -errorcode]
|
if {"CHILDSTATUS" == [lindex $errorCode 0]} {
|
||||||
if {[lindex $details 0] eq "CHILDSTATUS"} {
|
set exit_status [lindex $errorCode 2]
|
||||||
set status [lindex $details 2]
|
|
||||||
if {$report} {viewdata "Failed: $execute(cmd,$id)\nstderr:\n$err\ndata:\n$execute(data,$id)"}
|
|
||||||
} else {
|
|
||||||
set status 1
|
|
||||||
if {$report} {viewdata "Completed: $execute(cmd,$id)\nstderr:\n$err\ndata:\n$execute(data,$id)"}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
set status 1
|
|
||||||
if {$report} {viewdata "Completed: $execute(cmd,$id)\nstderr:\n$err\ndata:\n$execute(data,$id)"}
|
|
||||||
}
|
}
|
||||||
}
|
if {$report} {viewdata "Completed: $execute(cmd,$id)\nstderr:\n$err\ndata:\n$execute(data,$id)"}
|
||||||
if {$status == 0} {
|
} else {
|
||||||
if {$report} {viewdata "Completed: $execute(cmd,$id)\ndata:\n$execute(data,$id)"}
|
if {$report} {viewdata "Completed: $execute(cmd,$id)\ndata:\n$execute(data,$id)"}
|
||||||
}
|
}
|
||||||
if {[info exists execute(callback,$id)] && $execute(callback,$id) ne {}} {
|
if {[info exists execute(callback,$id)] && $execute(callback,$id) ne {}} {
|
||||||
|
|
@ -248,7 +235,7 @@ proc execute_fileevent {id} {
|
||||||
set execute(data,last) $execute(data,$id)
|
set execute(data,last) $execute(data,$id)
|
||||||
set execute(error,last) $err
|
set execute(error,last) $err
|
||||||
set execute(status,last) $execute(status,$id)
|
set execute(status,last) $execute(status,$id)
|
||||||
set execute(exitcode,last) $status
|
set execute(exitcode,last) $exit_status
|
||||||
unset execute(pipe,$id)
|
unset execute(pipe,$id)
|
||||||
unset execute(data,$id)
|
unset execute(data,$id)
|
||||||
unset execute(status,$id)
|
unset execute(status,$id)
|
||||||
|
|
|
||||||
|
|
@ -227,13 +227,11 @@ lab=TRIANG}
|
||||||
N 820 -280 820 -160 {
|
N 820 -280 820 -160 {
|
||||||
lab=0}
|
lab=0}
|
||||||
C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true}
|
C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true}
|
||||||
C {code_shown.sym} 190 -250 0 0 {name=CONTROL value="* following line for batch mode...
|
C {code_shown.sym} 190 -250 0 0 {name=CONTROL value=".control
|
||||||
.tran .05u 1m uic
|
|
||||||
* following block for interactive mode
|
|
||||||
.control
|
|
||||||
* save all
|
* save all
|
||||||
tran .05u 1m uic
|
tran .05u 1m uic
|
||||||
write solar_panel.raw
|
write solar_panel.raw
|
||||||
|
exit
|
||||||
.endc
|
.endc
|
||||||
" net_name=true}
|
" net_name=true}
|
||||||
C {code.sym} 20 -190 0 0 {name=MODELS value=".MODEL DIODE D(IS=1.139e-08 RS=0.99 CJO=9.3e-12 VJ=1.6 M=0.411 BV=30 EG=0.7 )
|
C {code.sym} 20 -190 0 0 {name=MODELS value=".MODEL DIODE D(IS=1.139e-08 RS=0.99 CJO=9.3e-12 VJ=1.6 M=0.411 BV=30 EG=0.7 )
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue