mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-05 12:53:16 +08:00
Clear board_info entry after waiting for process
When certain DAP tests are run in a certain order, dejagnu will throw an exception during shutdown. After adding many logging statements, I tracked this down to kill_wait_spawned_process not clearing the 'fileid' board_info entry, causing dejagnu to try to wait for the process a second time -- and fail. Tom de Vries then pointed out a second instance of this, which I tracked down to the same problem occurring when spawning gdbserver. This version of the patch fixes this by adding a new proc that can be used to clean up board_info after waiting for a process to exit. I'm not sure why this problem hasn't affected the test suite in the past. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31435 Approved-By: Andrew Burgess <aburgess@redhat.com>
This commit is contained in:
parent
d0eb2625bf
commit
2518ce9470
@ -3310,6 +3310,20 @@ proc with_spawn_id { spawn_id body } {
|
||||
}
|
||||
}
|
||||
|
||||
# DejaGNU records spawn ids in a global array and tries to wait for
|
||||
# them when exiting. Sometimes this caused problems if gdb's test
|
||||
# suite has already waited for the particular spawn id. And, dejagnu
|
||||
# only seems to allow a single spawn id per "machine". This proc can
|
||||
# be used to clean up after a spawn id has been closed.
|
||||
proc clean_up_spawn_id {host id} {
|
||||
global board_info
|
||||
set name [board_info $host name]
|
||||
if {[info exists board_info($name,fileid)]
|
||||
&& $board_info($name,fileid) == $id} {
|
||||
unset -nocomplain board_info($name,fileid)
|
||||
}
|
||||
}
|
||||
|
||||
# Select the largest timeout from all the timeouts:
|
||||
# - the local "timeout" variable of the scope two levels above,
|
||||
# - the global "timeout" variable,
|
||||
@ -6194,6 +6208,7 @@ proc kill_wait_spawned_process { proc_spawn_id } {
|
||||
# wait for the PID in the background. That's fine because we
|
||||
# don't care about the exit status. */
|
||||
wait -nowait -i $proc_spawn_id
|
||||
clean_up_spawn_id target $proc_spawn_id
|
||||
}
|
||||
|
||||
# Returns the process id corresponding to the given spawn id.
|
||||
|
@ -433,6 +433,7 @@ proc close_gdbserver {} {
|
||||
# -nowait makes expect tell Tcl to wait for the process in the
|
||||
# background.
|
||||
catch "wait -nowait -i $server_spawn_id"
|
||||
clean_up_spawn_id target $server_spawn_id
|
||||
unset server_spawn_id
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user