From 414ed9b9e70da64f374b6ba69f8a838eba559ce7 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 11 Nov 2020 14:15:46 -0800 Subject: [PATCH] hciemu: Fix crash when test is aborted during pre setup If the tester_pre_setup_failed is called all timeout related to the test must be cancelled as the test should have been freed by the application and the next test is about to start. Signed-off-by: Anuj Jain Signed-off-by: Ayush Garg --- emulator/hciemu.c | 8 +++++++- src/shared/tester.c | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/emulator/hciemu.c b/emulator/hciemu.c index 9045cd5..62d11d4 100755 --- a/emulator/hciemu.c +++ b/emulator/hciemu.c @@ -42,6 +42,7 @@ struct hciemu { guint host_source; guint master_source; guint client_source; + guint start_source; struct queue *post_command_hooks; char bdaddr_str[18]; @@ -296,6 +297,8 @@ static gboolean start_stack(gpointer user_data) { struct hciemu *hciemu = user_data; + hciemu->start_source = 0; + bthost_start(hciemu->host_stack); return FALSE; @@ -352,7 +355,7 @@ struct hciemu *hciemu_new(enum hciemu_type type) return NULL; } - g_idle_add(start_stack, hciemu); + hciemu->start_source = g_idle_add(start_stack, hciemu); return hciemu_ref(hciemu); } @@ -377,6 +380,9 @@ void hciemu_unref(struct hciemu *hciemu) queue_destroy(hciemu->post_command_hooks, destroy_command_hook); + if (hciemu->start_source) + g_source_remove(hciemu->start_source); + g_source_remove(hciemu->host_source); g_source_remove(hciemu->client_source); g_source_remove(hciemu->master_source); diff --git a/src/shared/tester.c b/src/shared/tester.c index 7c19bbb..e65eb5b 100755 --- a/src/shared/tester.c +++ b/src/shared/tester.c @@ -540,6 +540,11 @@ void tester_pre_setup_failed(void) if (test->stage != TEST_STAGE_PRE_SETUP) return; + if (test->timeout_id > 0) { + g_source_remove(test->timeout_id); + test->timeout_id = 0; + } + print_progress(test->name, COLOR_RED, "pre setup failed"); g_idle_add(done_callback, test); -- 2.7.4