| 313 | } |
| 314 | |
| 315 | rt_err_t rt_ktime_hrtimer_detach(rt_ktime_hrtimer_t timer) |
| 316 | { |
| 317 | rt_base_t level; |
| 318 | |
| 319 | /* parameter check */ |
| 320 | RT_ASSERT(timer != RT_NULL); |
| 321 | |
| 322 | /* notify the timer stop event */ |
| 323 | rt_completion_wakeup_by_errno(&timer->completion, RT_ERROR); |
| 324 | |
| 325 | level = rt_spin_lock_irqsave(&_spinlock); |
| 326 | |
| 327 | /* stop timer */ |
| 328 | timer->flag &= ~RT_TIMER_FLAG_ACTIVATED; |
| 329 | /* when interrupted */ |
| 330 | if (timer->error == -RT_EINTR || timer->error == RT_EINTR) |
| 331 | { |
| 332 | rt_list_remove(&timer->node); |
| 333 | _set_next_timeout_locked(); |
| 334 | } |
| 335 | |
| 336 | rt_spin_unlock_irqrestore(&_spinlock, level); |
| 337 | |
| 338 | return RT_EOK; |
| 339 | } |
| 340 | |
| 341 | /************************** delay ***************************/ |
| 342 |
no test coverage detected