blob: 1456eb4faa565c613aff4c313841c431fdbdadb2 [file] [log] [blame]
xjde81d1d2021-11-25 15:01:52 +08001/* ********************************
2 * Author: Warren
3 * License: MobileTek
4 *//** @file link.h*//*
5 *
6 ********************************/
7#include "link.h"
8#include <stdlib.h>
9#include <string.h>
10#include <log/log.h>
11COND_NODE* createCondLinkHead()
12{
13 COND_NODE *head = (COND_NODE *)malloc(sizeof(COND_NODE));
14 if(head==NULL)
15 {
16 return NULL;
17 }
18 memset(head,0,sizeof(COND_NODE));
19 head->next=NULL;
20 return head;
21}
22
23COND_NODE* initConditionLink()
24{
25 COND_NODE* head = createCondLinkHead();
26 if(head==NULL)
27 {
28 return NULL;
29 }
30 return head;
31}
32
33COND_NODE * addCondLinkNode(COND_NODE *head,int32_t token,int index,pthread_cond_t cond)
34{
35 COND_NODE* Node = (COND_NODE *)malloc(sizeof(COND_NODE));
36 memset(Node,0,sizeof(COND_NODE));
37 if (Node)
38 {
39 Node->token = token;
40 Node->cond = cond;
41 Node->cond_index=index;
42 Node->next = head;
43 head = Node;
44 //LYDBGLOG("[%s] node->token is %x,request is %d\n",__FUNCTION__,Node->token,Node->request);
45 }
46 else
47 {
48 //LYDBGLOG("[%s] malloc Node failed!\n",__FUNCTION__);
49 return head;
50 }
51 return head;
52}
53
54COND_NODE * DeleteLinkNode(int32_t token,COND_NODE *head)
55{
56 COND_NODE *p,*temp;
57 p = head;
58 if((p ==NULL)||(p->next==NULL))
59 {
60 // LYDBGLOG("[%s] lynqDeQueue head is NULL\n",__FUNCTION__);
61 return 0;
62 //return head;
63 }
64 //delete head note
65 if(p->token == token)
66 {
67 temp=p->next;
68 free(p);
69 p =NULL;
70 // LYDBGLOG("[%s] delete head note!!\n",__FUNCTION__);
71 return temp;
72 //return head;
73 }
74 //delete intermediate node
75 do
76 {
77 temp = p;
78 p=p->next;
79 if(p->token==token)
80 {
81 temp->next=p->next;
82 free(p);
83 p=NULL;
84 // LYDBGLOG("[%s] delete intermediate node!!\n",__FUNCTION__);
85 return head;
86 }
87 }while(p->next->next!=NULL);
88 // LYDBGLOG("[%s] Not find this token,token is %d!!\n",__FUNCTION__,token);
89 return head;
90}
91
92COND_NODE * searchRequestinCondLink(int32_t token,COND_NODE *head)
93{
94 COND_NODE *p;
95 p=head;
96 if(p!=NULL)
97 {
98 do
99 {
100 if(p->token == token)
101 {
102 RLOGD("[searchRequestinCondLink] search request %x success",token);
103 return p;
104 }
105 p = p->next;
106 } while (p != NULL);
107 }
108 return NULL;
109}
110