Commit 18c3a323 authored by ROBERT Benoit's avatar ROBERT Benoit

correct issue #148 - protect whatchdog thread mutex unlock

parent bf5bf8ba
...@@ -297,6 +297,8 @@ static void *watchdog_thread(void *arg) { ...@@ -297,6 +297,8 @@ static void *watchdog_thread(void *arg) {
int first_acquisition; int first_acquisition;
struct timespec sleep_time,wait; struct timespec sleep_time,wait;
int ret;
wait.tv_sec=0; wait.tv_sec=0;
wait.tv_nsec=50000000L; wait.tv_nsec=50000000L;
...@@ -404,10 +406,10 @@ static void *watchdog_thread(void *arg) { ...@@ -404,10 +406,10 @@ static void *watchdog_thread(void *arg) {
first_acquisition=1; first_acquisition=1;
printf("Locking watchdog for first acquisition\n"); 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 // 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)) { while ((!oai_exit) && (!exm->watchdog_exit)) {
if (exm->daq_state == running) { if (exm->daq_state == running) {
...@@ -424,7 +426,15 @@ static void *watchdog_thread(void *arg) { ...@@ -424,7 +426,15 @@ static void *watchdog_thread(void *arg) {
exm->last_mbox = mbox; exm->last_mbox = mbox;
if (first_acquisition==0) 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) ; exm->ts += (diff*exm->samples_per_frame/150) ;
...@@ -433,7 +443,7 @@ static void *watchdog_thread(void *arg) { ...@@ -433,7 +443,7 @@ static void *watchdog_thread(void *arg) {
(diff > 16)&& (diff > 16)&&
(first_acquisition==0)) {// we're too late so exit (first_acquisition==0)) {// we're too late so exit
exm->watchdog_exit = 1; 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; first_acquisition=0;
...@@ -442,7 +452,7 @@ static void *watchdog_thread(void *arg) { ...@@ -442,7 +452,7 @@ static void *watchdog_thread(void *arg) {
cnt_diff0++; cnt_diff0++;
if (cnt_diff0 == 10) { if (cnt_diff0 == 10) {
exm->watchdog_exit = 1; exm->watchdog_exit = 1;
printf("exiting, HW stopped\n"); printf("exiting, HW stopped %llu\n", cnt_diff0);
} }
} }
else else
...@@ -453,9 +463,11 @@ static void *watchdog_thread(void *arg) { ...@@ -453,9 +463,11 @@ static void *watchdog_thread(void *arg) {
(exm->ts - exm->last_ts_rx > exm->samples_per_frame)) { (exm->ts - exm->last_ts_rx > exm->samples_per_frame)) {
exm->watchdog_exit = 1; exm->watchdog_exit = 1;
printf("RX Overflow, exiting (TS %llu, TS last read %llu)\n", 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); // 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); pthread_mutex_unlock(&exm->watchdog_mutex);
} }
else { else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment