FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/gpf/osl/os_com_fl.c @ 351:fd015570cacc
os_com_fl.c: os_FindSuspendingQueue() and os_DestroyQueue() done
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 11 May 2014 20:34:43 +0000 |
parents | 5bc6a8f8b4a8 |
children | 39b5b18e26b2 |
comparison
equal
deleted
inserted
replaced
350:5bc6a8f8b4a8 | 351:fd015570cacc |
---|---|
140 *opc = p->Data.data32; | 140 *opc = p->Data.data32; |
141 *time = p->Data.time; | 141 *time = p->Data.time; |
142 p++; | 142 p++; |
143 return(OS_OK); | 143 return(OS_OK); |
144 } | 144 } |
145 | |
146 GLOBAL unsigned char * | |
147 os_FindSuspendingQueue(unsigned int *tcb) | |
148 { | |
149 USHORT i; | |
150 SM_SUSPEND *susp, *susp2; | |
151 | |
152 for (i = 1; i <= MaxCommunications; i++) { | |
153 if (!ComTable[i].Name[0]) | |
154 continue; | |
155 if (susp = ComTable[i].FreeSemCB.sm_suspension_list) { | |
156 if (susp->sm_suspended_task == (NU_TASK*)tcb) | |
157 return(ComTable[i].FreeSemCB.sm_name + 1); | |
158 susp = (SM_SUSPEND *) susp->sm_suspend_link.cs_next; | |
159 for (susp2 = susp; ; ) { | |
160 if (susp2->sm_suspended_task == (NU_TASK*)tcb) | |
161 return(ComTable[i].FreeSemCB.sm_name+1); | |
162 susp2 = (SM_SUSPEND *) | |
163 susp2->sm_suspend_link.cs_next; | |
164 if (susp2 == susp) | |
165 break; | |
166 } | |
167 } | |
168 if (susp = ComTable[i].UsedSemCB.sm_suspension_list) { | |
169 if (susp->sm_suspended_task == (NU_TASK*)tcb) | |
170 return(ComTable[i].UsedSemCB.sm_name + 1); | |
171 susp = (SM_SUSPEND *) susp->sm_suspend_link.cs_next; | |
172 for (susp2 = susp; ; ) { | |
173 if (susp2->sm_suspended_task == (NU_TASK*)tcb) | |
174 return(ComTable[i].UsedSemCB.sm_name+1); | |
175 susp2 = (SM_SUSPEND *) | |
176 susp2->sm_suspend_link.cs_next; | |
177 if (susp2 == susp) | |
178 break; | |
179 } | |
180 } | |
181 } | |
182 return(0); | |
183 } | |
184 | |
185 GLOBAL LONG | |
186 os_DestroyQueue(OS_HANDLE TaskHandle, OS_HANDLE ComHandle) | |
187 { | |
188 STATUS sts; | |
189 | |
190 sts = NU_Obtain_Semaphore(&ComSemCB, NU_SUSPEND); | |
191 if (NU_Delete_Semaphore(&ComTable[ComHandle].FreeSemCB) != NU_SUCCESS) { | |
192 return_error: if (sts == NU_SUCCESS) | |
193 NU_Release_Semaphore(&ComSemCB); | |
194 return(OS_ERROR); | |
195 } | |
196 if (NU_Delete_Semaphore(&ComTable[ComHandle].UsedSemCB) != NU_SUCCESS) | |
197 goto return_error; | |
198 if (os_DeallocateMemory(TaskHandle, ComTable[ComHandle].QueueData) | |
199 == OS_ERROR) | |
200 goto return_error; | |
201 ComTable[ComHandle].Name[0] = 0; | |
202 if (sts == NU_SUCCESS) | |
203 NU_Release_Semaphore(&ComSemCB); | |
204 return(OS_OK); | |
205 } |