* @brief Delete a node from the user object list of a lightweight process * * @param[in,out] lwp The lightweight process structure whose object list needs updating * @param[in] node The node to be deleted from the LWP's object list * * @return rt_err_t Returns 0 on success, or -1 on failure */
| 487 | * @return rt_err_t Returns 0 on success, or -1 on failure |
| 488 | */ |
| 489 | static rt_err_t _object_node_delete(struct rt_lwp *lwp, struct lwp_avl_struct *node) |
| 490 | { |
| 491 | rt_err_t ret = -1; |
| 492 | rt_object_t object; |
| 493 | |
| 494 | if (!lwp || !node) |
| 495 | { |
| 496 | return ret; |
| 497 | } |
| 498 | object = (rt_object_t)node->avl_key; |
| 499 | object->lwp_ref_count--; |
| 500 | if (object->lwp_ref_count == 0) |
| 501 | { |
| 502 | /* remove from kernel object list */ |
| 503 | switch (object->type) |
| 504 | { |
| 505 | case RT_Object_Class_Semaphore: |
| 506 | ret = rt_sem_delete((rt_sem_t)object); |
| 507 | break; |
| 508 | case RT_Object_Class_Mutex: |
| 509 | ret = rt_mutex_delete((rt_mutex_t)object); |
| 510 | break; |
| 511 | case RT_Object_Class_Event: |
| 512 | ret = rt_event_delete((rt_event_t)object); |
| 513 | break; |
| 514 | case RT_Object_Class_MailBox: |
| 515 | ret = rt_mb_delete((rt_mailbox_t)object); |
| 516 | break; |
| 517 | case RT_Object_Class_MessageQueue: |
| 518 | ret = rt_mq_delete((rt_mq_t)object); |
| 519 | break; |
| 520 | case RT_Object_Class_Timer: |
| 521 | ret = rt_timer_delete((rt_timer_t)object); |
| 522 | break; |
| 523 | case RT_Object_Class_Custom: |
| 524 | ret = rt_custom_object_destroy(object); |
| 525 | break; |
| 526 | default: |
| 527 | LOG_E("input object type(%d) error", object->type); |
| 528 | break; |
| 529 | } |
| 530 | } |
| 531 | else |
| 532 | { |
| 533 | ret = 0; |
| 534 | } |
| 535 | lwp_avl_remove(node, &lwp->object_root); |
| 536 | rt_free(node); |
| 537 | return ret; |
| 538 | } |
| 539 | |
| 540 | /** |
| 541 | * @brief Delete an object from the user object list of a lightweight process |
no test coverage detected