diff --git a/src/xpdev/link_list.c b/src/xpdev/link_list.c index 118fdce0fd47f320272d05a22802d2616bc5cc1c..ea2854f0c6da941ed7ee8be414f15be435f627db 100644 --- a/src/xpdev/link_list.c +++ b/src/xpdev/link_list.c @@ -150,6 +150,7 @@ long listDettach(link_list_t* list) if((refs=--list->refs)==0) { listUnlock(list); + // coverity[sleep:SUPPRESS] listFree(list); } else @@ -502,8 +503,11 @@ bool listNodeIsLocked(const list_node_t* node) bool listLockNode(list_node_t* node) { + if (node == NULL) + return false; + listLock(node->list); - if(node==NULL || (node->flags&LINK_LIST_LOCKED)) { + if(node->flags&LINK_LIST_LOCKED) { listUnlock(node->list); return(false); } @@ -769,6 +773,7 @@ void* listRemoveTaggedNode(link_list_t* list, list_node_tag_t tag, bool free_dat listLock(list); + // coverity[double_lock:SUPPRESS] if((node=listFindTaggedNode(list, tag)) != NULL) data = list_remove_node(list, node, free_data); @@ -794,10 +799,12 @@ long listRemoveNodes(link_list_t* list, list_node_t* node, long max, bool free_d for(count=0; node!=NULL && count<max; node=next_node, count++) { next_node = node->next; + // coverity[double_lock:SUPPRESS] if(listRemoveNode(list, node, free_data)==NULL) break; } + // coverity[double_unlock:SUPPRESS] listUnlock(list); return(count);