From 476d036084139e5a070d016d0799b552c5431ac0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Tue, 25 Apr 2023 17:28:52 +0200 Subject: [PATCH] vgdb: Use --wait argument in multi mode when waiting for valgrind to start. --- coregrind/vgdb.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c index 21e67c65b7..8ec4240770 100644 --- a/coregrind/vgdb.c +++ b/coregrind/vgdb.c @@ -178,14 +178,20 @@ void add_written(int nrw) static int shared_mem_fd = -1; static -void map_vgdbshared(char* shared_mem) +void map_vgdbshared(char* shared_mem, int check_trials) { struct stat fdstat; void **s; int tries = 50; int err; - /* valgrind might still be starting up, give it 5 seconds. */ + /* valgrind might still be starting up, give it 5 seconds by + * default, or check_trails seconds if it is set by --wait + * to more than a second. */ + if (check_trials > 1) { + DEBUG(1, "check_trials %d\n", check_trials); + tries = check_trials * 10; + } do { shared_mem_fd = open(shared_mem, O_RDWR | O_CLOEXEC); err = errno; @@ -581,7 +587,7 @@ void wait_for_gdb_connect(int in_port) /* prepares the FIFOs filenames, map the shared memory. */ static -void prepare_fifos_and_shared_mem(int pid) +void prepare_fifos_and_shared_mem(int pid, int check_trials) { const HChar *user, *host; unsigned len; @@ -610,7 +616,7 @@ void prepare_fifos_and_shared_mem(int pid) DEBUG(1, "vgdb: using %s %s %s\n", from_gdb_to_pid, to_gdb_from_pid, shared_mem); - map_vgdbshared(shared_mem); + map_vgdbshared(shared_mem, check_trials); } static void @@ -1303,7 +1309,7 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, /* Do multi stuff. */ static -void do_multi_mode(void) +void do_multi_mode(int check_trials) { char *buf = vmalloc(PBUFSIZ+1); char *q_buf = vmalloc(PBUFSIZ+1); //save the qSupported packet sent by gdb @@ -1458,7 +1464,7 @@ void do_multi_mode(void) if (res == 0) { // Lets report we Stopped with SIGTRAP (05). send_packet ("S05", noackmode); - prepare_fifos_and_shared_mem(valgrind_pid); + prepare_fifos_and_shared_mem(valgrind_pid, check_trials); DEBUG(1, "from_gdb_to_pid %s, to_gdb_from_pid %s\n", from_gdb_to_pid, to_gdb_from_pid); // gdb_relay is an endless loop till valgrind quits. @@ -2392,7 +2398,8 @@ int main(int argc, char** argv) if (!multi_mode) { pid = search_arg_pid(arg_pid, check_trials, show_list); - prepare_fifos_and_shared_mem(pid); + /* We pass 1 for check_trails here, because search_arg_pid already waited. */ + prepare_fifos_and_shared_mem(pid, 1); } else { pid = 0; } @@ -2413,7 +2420,9 @@ int main(int argc, char** argv) } if (multi_mode) { - do_multi_mode (); + /* check_trails is the --wait argument in seconds, defaulting to 1 + * if not given. */ + do_multi_mode (check_trials); } else if (last_command >= 0) { standalone_send_commands(pid, last_command, commands); } else { -- 2.47.2