diff -r 2b9fd5086704 -r 8bfe0ac00cdb drivers/timers_unix/timers_unix.c --- a/drivers/timers_unix/timers_unix.c Fri Jun 19 20:16:07 2015 +0200 +++ b/drivers/timers_unix/timers_unix.c Mon Aug 03 18:01:58 2015 +0200 @@ -1,12 +1,12 @@ #include #include -#include +#include #include #include -#include "applicfg.h" -#include "timer.h" +#include +#include static pthread_mutex_t CanFestival_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -104,6 +104,20 @@ // if(signal(SIGTERM, canReceiveLoop_signal) == SIG_ERR) { // perror("signal()"); //} + + // Set the cancelation state for immediatly cancel the task + int ret; + + ret = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); + + if (ret != 0) + perror("Can't enable the cancelation of the receiving task"); + + ret = pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); + + if (ret != 0) + perror("Can't set the asynchronous cancel typ"); + unixtimer_ReceiveLoop_task_proc((CAN_PORT)port); return NULL; @@ -119,8 +133,8 @@ void WaitReceiveTaskEnd(TASK_HANDLE *Thread) { - if(pthread_kill(*Thread, SIGTERM)) { - perror("pthread_kill()"); + if(pthread_cancel(*Thread)) { + perror("pthread_cancel()"); } if(pthread_join(*Thread, NULL)) { perror("pthread_join()");