@@ -44,7 +44,7 @@ g_user_mutex userMutexCreate(bool reentrant)
4444 g_user_mutex_entry* entry = (g_user_mutex_entry*) heapAllocate (sizeof (g_user_mutex_entry));
4545 mutexInitializeTask (&entry->lock , __func__);
4646 entry->value = 0 ;
47- entry->waiters = nullptr ;
47+ waitQueueInitialize (& entry->waiters ) ;
4848 entry->reentrant = reentrant;
4949 entry->owner = -1 ;
5050
@@ -206,14 +206,7 @@ void userMutexWaitForAcquire(g_user_mutex mutex, g_tid task)
206206 return ;
207207 }
208208
209- mutexAcquire (&entry->lock );
210-
211- auto waiter = (g_user_mutex_waiter*) heapAllocate (sizeof (g_user_mutex_waiter));
212- waiter->task = task;
213- waiter->next = entry->waiters ;
214- entry->waiters = waiter;
215-
216- mutexRelease (&entry->lock );
209+ waitQueueAdd (&entry->waiters , task);
217210}
218211
219212void userMutexUnwaitForAcquire (g_user_mutex mutex, g_tid task)
@@ -225,41 +218,10 @@ void userMutexUnwaitForAcquire(g_user_mutex mutex, g_tid task)
225218 return ;
226219 }
227220
228- mutexAcquire (&entry->lock );
229-
230- g_user_mutex_waiter* prev = nullptr ;
231- g_user_mutex_waiter* waiter = entry->waiters ;
232- while (waiter)
233- {
234- if (waiter->task == task)
235- {
236- auto next = waiter->next ;
237- if (prev)
238- prev->next = next;
239- else
240- entry->waiters = next;
241-
242- heapFree (waiter);
243- break ;
244- }
245- prev = waiter;
246- waiter = waiter->next ;
247- }
248-
249- mutexRelease (&entry->lock );
221+ waitQueueRemove (&entry->waiters , task);
250222}
251223
252224void _userMutexWakeWaitingTasks (g_user_mutex_entry* entry)
253225{
254- auto waiter = entry->waiters ;
255- while (waiter)
256- {
257- g_task* wakeTask = taskingGetById (waiter->task );
258- taskingWake (wakeTask);
259-
260- auto next = waiter->next ;
261- heapFree (waiter);
262- waiter = next;
263- }
264- entry->waiters = nullptr ;
226+ waitQueueWake (&entry->waiters );
265227}
0 commit comments