From 124bb8a7d19660248291454c850613e964d142d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergi=20Hern=C3=A0ndez=20Juan?= <shernand@iri.upc.edu> Date: Wed, 16 Mar 2016 11:46:03 +0000 Subject: [PATCH] Added event activations in the main thread to avoid getting stuck when an scanning error occurs or the scan is cancelled. --- src/dynamixelserver.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/dynamixelserver.cpp b/src/dynamixelserver.cpp index 7f503a1..822a9c0 100644 --- a/src/dynamixelserver.cpp +++ b/src/dynamixelserver.cpp @@ -584,7 +584,8 @@ void *CDynamixelServer::scan_thread(void *param) dyn_server->dynamixel_access.enter(); dyn_server->state=dyn_created; dyn_server->scan_error="communication device not initialized"; - dyn_server->event_server->set_event(dyn_server->scan_error_event_id); + if(!dyn_server->event_server->event_is_set(dyn_server->scan_error_event_id)) + dyn_server->event_server->set_event(dyn_server->scan_error_event_id); dyn_server->dynamixel_access.exit(); pthread_exit(NULL); } @@ -596,6 +597,8 @@ void *CDynamixelServer::scan_thread(void *param) if(dyn_server->event_server->event_is_set(dyn_server->stop_scan_event_id)) { dyn_server->event_server->reset_event(dyn_server->stop_scan_event_id); + if(!dyn_server->event_server->event_is_set(dyn_server->scan_done_event_id)) + dyn_server->event_server->set_event(dyn_server->scan_done_event_id); dyn_server->devices_v1.clear(); dyn_server->devices_v2.clear(); pthread_exit(NULL); @@ -632,14 +635,16 @@ void *CDynamixelServer::scan_thread(void *param) dyn_server->devices_v2.clear(); dyn_server->state=dyn_created; dyn_server->scan_error=e.what(); - dyn_server->event_server->set_event(dyn_server->scan_error_event_id); + if(!dyn_server->event_server->event_is_set(dyn_server->scan_error_event_id)) + dyn_server->event_server->set_event(dyn_server->scan_error_event_id); dyn_server->dynamixel_access.exit(); pthread_exit(NULL); } } dyn_server->dynamixel_access.enter(); dyn_server->state=dyn_scan_done; - dyn_server->event_server->set_event(dyn_server->scan_done_event_id); + if(!dyn_server->event_server->event_is_set(dyn_server->scan_done_event_id)) + dyn_server->event_server->set_event(dyn_server->scan_done_event_id); dyn_server->dynamixel_access.exit(); pthread_exit(NULL); } -- GitLab