diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
index 16754a84fb3ff37d203eb3fbae12834a08ce0709..8e07f7ac9ed66ef5c2c1db78a06ca870d27431e0 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
@@ -298,6 +298,8 @@ static void *watchdog_thread(void *arg) {
   int first_acquisition;
   struct timespec sleep_time,wait;
 
+  int ret;
+
 
   wait.tv_sec=0;
   wait.tv_nsec=50000000L;
@@ -405,10 +407,10 @@ static void *watchdog_thread(void *arg) {
 
   first_acquisition=1;
   printf("Locking watchdog for first acquisition\n");
-  pthread_mutex_timedlock(&exm->watchdog_mutex,&wait);
+  ret = pthread_mutex_timedlock(&exm->watchdog_mutex,&wait);
   // main loop to keep up with DMA transfers from exmimo2
 
-  int cnt_diff0=0;
+  unsigned long long cnt_diff0=0;
   while ((!oai_exit) && (!exm->watchdog_exit)) {
 
     if (exm->daq_state == running) {
@@ -425,7 +427,15 @@ static void *watchdog_thread(void *arg) {
       exm->last_mbox = mbox;
 
       if (first_acquisition==0)
-	pthread_mutex_timedlock(&exm->watchdog_mutex,&wait);
+      {
+        ret = pthread_mutex_timedlock(&exm->watchdog_mutex,&wait);
+        if(ret)
+        {
+//           exm->watchdog_exit = 1;
+           printf("watchdog_thread pthread_mutex_timedlock error = %d\n", ret);
+           continue;
+        }
+      }
 
       exm->ts += (diff*exm->samples_per_frame/150) ; 
 
@@ -434,7 +444,7 @@ static void *watchdog_thread(void *arg) {
 	  (diff > 16)&&
 	  (first_acquisition==0))  {// we're too late so exit
 	exm->watchdog_exit = 1;
-        printf("exiting, too late to keep up\n");
+        printf("exiting, too late to keep up - diff = %d\n", diff);
       }
       first_acquisition=0;
 
@@ -443,7 +453,7 @@ static void *watchdog_thread(void *arg) {
 	cnt_diff0++;
 	if (cnt_diff0 == 10) {
 	  exm->watchdog_exit = 1;
-	  printf("exiting, HW stopped\n");
+	  printf("exiting, HW stopped %llu\n", cnt_diff0);
 	}
       }
       else
@@ -454,9 +464,11 @@ static void *watchdog_thread(void *arg) {
 	  (exm->ts - exm->last_ts_rx > exm->samples_per_frame)) {
 	exm->watchdog_exit = 1;
 	printf("RX Overflow, exiting (TS %llu, TS last read %llu)\n",
-	       exm->ts,exm->last_ts_rx);
+	       (long long unsigned int)exm->ts,(long long unsigned int)exm->last_ts_rx);
       }
       //      printf("ts %lu, last_ts_rx %lu, mbox %d, diff %d\n",exm->ts, exm->last_ts_rx,mbox,diff);
+      
+      if ( !ret )
       pthread_mutex_unlock(&exm->watchdog_mutex);
     }
     else {