diff --git a/src/comm.cpp b/src/comm.cpp index 27fb269211f3394f43725f5af37fbc69e54a21d7..3acf8a7f841046905bc147af039a0e6b65096813 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -239,26 +239,30 @@ void *CComm::comm_thread(void *param) while(!end) { wait_result=comm_dev->hard_wait_comm_event(); - comm_dev->access_comm.enter(); - if(wait_result==-1) - end=true; - else - { - if(wait_result==1)/* data has been received */ - { - comm_dev->on_receive(); - } - if(wait_result==2) + try{ + comm_dev->access_comm.enter(); + if(wait_result==-1) + end=true; + else { - comm_dev->on_error(); + if(wait_result==1)/* data has been received */ + { + comm_dev->on_receive(); + } + if(wait_result==2) + { + comm_dev->on_error(); + } } + comm_dev->access_comm.exit(); + }catch(CException &e){ + end=true; } - comm_dev->access_comm.exit(); } /* handle exceptions */ // throw CCommException(_HERE_,"Unexpected error while waiting for new data.\n",comm_dev->comm_id); - return NULL; + pthread_exit(NULL); } void CComm::on_receive(void)