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)