From 6716b06fde9edb28e41c024baa0df98a71ab3021 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sergi=20Hern=C3=A0ndez=20Juan?= <shernand@iri.upc.edu>
Date: Sat, 2 Apr 2016 17:48:10 +0000
Subject: [PATCH] Unblocked the mutex when calling the wait_all() function.

---
 src/dynamixel.cpp       |  1 -
 src/dynamixelserver.cpp | 10 +++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/dynamixel.cpp b/src/dynamixel.cpp
index 7ddd947..61df2a8 100644
--- a/src/dynamixel.cpp
+++ b/src/dynamixel.cpp
@@ -290,7 +290,6 @@ void CDynamixel::handle_error(unsigned char error)
       error_msg+="\nOverload";
     if(error&0x40)
       error_msg+="\nInvalid instruction";
-    std::cout << error_msg << std::endl;
     throw CDynamixelAlarmException(_HERE_,error_msg,this->node_address,error);
   }
 }
diff --git a/src/dynamixelserver.cpp b/src/dynamixelserver.cpp
index 822a9c0..c48e6a8 100644
--- a/src/dynamixelserver.cpp
+++ b/src/dynamixelserver.cpp
@@ -194,7 +194,9 @@ unsigned char CDynamixelServer::receive_status_packet_v1(unsigned char **data,un
       do{
         if((num=this->comm_dev->get_num_data())==0)
         {
+          this->dynamixel_access.exit();
           this->event_server->wait_all(events,20);
+          this->dynamixel_access.enter();
           num=this->comm_dev->get_num_data();
         }
         if((read+num)>1024)
@@ -215,7 +217,9 @@ unsigned char CDynamixelServer::receive_status_packet_v1(unsigned char **data,un
       {
         if((num=this->comm_dev->get_num_data())==0)
         {
+          this->dynamixel_access.exit();
           this->event_server->wait_all(events,20);
+          this->dynamixel_access.enter();
           num=this->comm_dev->get_num_data();
         }
         if((read-start+num)>length)
@@ -277,7 +281,9 @@ unsigned char CDynamixelServer::receive_status_packet_v2(unsigned char **data,un
       do{
         if((num=this->comm_dev->get_num_data())==0)
         {
+          this->dynamixel_access.exit();
           this->event_server->wait_all(events,20);
+          this->dynamixel_access.enter();
           num=this->comm_dev->get_num_data();
         }
         if((read+num)>1024)
@@ -291,14 +297,16 @@ unsigned char CDynamixelServer::receive_status_packet_v2(unsigned char **data,un
           read+=num;
         }
         this->sync_packet_v2(data_int,read,&start);
-      }while(read<7);
+      }while((read-start)<7);
       length=data_int[start+5]+data_int[start+6]*256+7;
       // read the remaining of the packet
       while((read-start)<length)
       {
         if((num=this->comm_dev->get_num_data())==0)
         {
+          this->dynamixel_access.exit();
           this->event_server->wait_all(events,20);
+          this->dynamixel_access.enter();
           num=this->comm_dev->get_num_data();
         }
         if((read-start+num)>length)
-- 
GitLab