\brief delete an alarm * * \param alarm pointer to alarm * \return RT_EOK */
| 680 | * \return RT_EOK |
| 681 | */ |
| 682 | rt_err_t rt_alarm_delete(rt_alarm_t alarm) |
| 683 | { |
| 684 | rt_err_t ret = RT_EOK; |
| 685 | |
| 686 | if (alarm == RT_NULL) |
| 687 | return -RT_ERROR; |
| 688 | rt_mutex_take(&_container.mutex, RT_WAITING_FOREVER); |
| 689 | /* stop the alarm */ |
| 690 | alarm->flag &= ~RT_ALARM_STATE_START; |
| 691 | if (_container.current == alarm) |
| 692 | { |
| 693 | ret = alarm_set(alarm); |
| 694 | _container.current = RT_NULL; |
| 695 | /* set new alarm if necessary */ |
| 696 | alarm_update(0); |
| 697 | } |
| 698 | rt_list_remove(&alarm->list); |
| 699 | rt_free(alarm); |
| 700 | |
| 701 | rt_mutex_release(&_container.mutex); |
| 702 | |
| 703 | return (ret); |
| 704 | } |
| 705 | |
| 706 | /** \brief create an alarm |
| 707 | * |