# HG changeset patch # User Edouard Tisserant # Date 1524479523 -7200 # Node ID 570e3a444023dca26fdfa28837151fc450b9cb03 # Parent 4657af9ede3437c932cc163a55f162225bf43b4c Workaround Alchemy task not beeing waken up when closing file descriptor it is waiting on, sequel of Xenomai3 all posix file ops diff -r 4657af9ede34 -r 570e3a444023 drivers/can_socket/can_socket.c --- a/drivers/can_socket/can_socket.c Fri Apr 20 15:00:04 2018 +0200 +++ b/drivers/can_socket/can_socket.c Mon Apr 23 12:32:03 2018 +0200 @@ -58,7 +58,7 @@ struct can_frame frame; res = recv (*(int *) fd0, &frame, sizeof (frame), 0); - if (res < 0) + if (res <= 0) { fprintf (stderr, "Recv failed: %s\n", strerror (errno)); return 1; @@ -101,7 +101,7 @@ print_message(m); #endif res = send (*(int *) fd0, &frame, sizeof (frame), 0); - if (res < 0) + if (res <= 0) { fprintf (stderr, "Send failed: %s\n", strerror (errno)); return 1; diff -r 4657af9ede34 -r 570e3a444023 drivers/timers_xeno/timers_xeno.c --- a/drivers/timers_xeno/timers_xeno.c Fri Apr 20 15:00:04 2018 +0200 +++ b/drivers/timers_xeno/timers_xeno.c Mon Apr 23 12:32:03 2018 +0200 @@ -64,13 +64,6 @@ rt_cond_signal(&timer_set); } -void cleanup_all(void) -{ - if (rt_task_join(&timerloop_task) != 0){ - printf("Failed to join with Timerloop task\n"); - } - rt_task_delete(&timerloop_task); -} /** * Clean all Semaphores, mutex, condition variable and main task @@ -81,6 +74,7 @@ rt_mutex_delete(&condition_mutex); rt_cond_delete(&timer_set); rt_sem_delete(&control_task); + rt_task_unblock(&timerloop_task); if (rt_task_join(&timerloop_task) != 0){ printf("Failed to join with Timerloop task\n"); } @@ -187,7 +181,7 @@ return; error: - cleanup_all(); + rt_task_delete(&timerloop_task); } /** @@ -225,6 +219,7 @@ */ void WaitReceiveTaskEnd(TASK_HANDLE *ReceiveLoop_task) { + rt_task_unblock(ReceiveLoop_task); if (rt_task_join(ReceiveLoop_task) != 0){ printf("Failed to join with Receive task\n"); }