| 19 | #ifdef RT_USING_HEAP |
| 20 | |
| 21 | rt_inline rt_err_t _workqueue_work_completion(struct rt_workqueue *queue) |
| 22 | { |
| 23 | rt_err_t result; |
| 24 | |
| 25 | while (1) |
| 26 | { |
| 27 | /* try to take condition semaphore */ |
| 28 | result = rt_sem_trytake(&(queue->sem)); |
| 29 | if (result == -RT_ETIMEOUT) |
| 30 | { |
| 31 | /* it's timeout, release this semaphore */ |
| 32 | rt_sem_release(&(queue->sem)); |
| 33 | } |
| 34 | else if (result == RT_EOK) |
| 35 | { |
| 36 | /* keep the sem value = 0 */ |
| 37 | result = RT_EOK; |
| 38 | break; |
| 39 | } |
| 40 | else |
| 41 | { |
| 42 | result = -RT_ERROR; |
| 43 | break; |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | return result; |
| 48 | } |
| 49 | |
| 50 | static void _workqueue_thread_entry(void *parameter) |
| 51 | { |
no test coverage detected