Fix some stuff for no priority and
thread_queue_wake() doesn't need the 2nd parameter. The original purpose for it never came to be. Non priority version mrsw_writer_wakeup_readers was left improperly finished. Get that back into line. Change-Id: Ic613a2479f3cc14dc7c761517670eb15178da9f5
This commit is contained in:
parent
e7e302f255
commit
81ffd9bfee
5 changed files with 14 additions and 20 deletions
|
@ -360,8 +360,7 @@ void block_thread(struct thread_entry *current, int timeout);
|
|||
higher priority than current were woken) */
|
||||
|
||||
/* A convenience function for waking an entire queue of threads. */
|
||||
unsigned int thread_queue_wake(struct thread_entry **list,
|
||||
volatile int *count);
|
||||
unsigned int thread_queue_wake(struct thread_entry **list);
|
||||
|
||||
/* Wakeup a thread at the head of a list */
|
||||
enum wakeup_thread_protocol
|
||||
|
|
|
@ -124,8 +124,15 @@ static FORCE_INLINE unsigned int
|
|||
mrsw_writer_wakeup_readers(struct mrsw_lock *mrsw)
|
||||
{
|
||||
mrsw->splay.blocker.thread = NULL;
|
||||
for (int count = 0; mrsw->queue && mrsw->queue->retval != 0; count++)
|
||||
int count = 0;
|
||||
|
||||
while (mrsw->queue && mrsw->queue->retval != 0)
|
||||
{
|
||||
wakeup_thread(&mrsw->queue);
|
||||
count++;
|
||||
}
|
||||
|
||||
mrsw->count = count;
|
||||
return THREAD_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -267,7 +267,7 @@ void queue_delete(struct event_queue *q)
|
|||
corelock_unlock(&all_queues.cl);
|
||||
|
||||
/* Release thread(s) waiting on queue head */
|
||||
thread_queue_wake(&q->queue, NULL);
|
||||
thread_queue_wake(&q->queue);
|
||||
|
||||
#ifdef HAVE_EXTENDED_MESSAGING_AND_NAME
|
||||
if(q->send)
|
||||
|
|
|
@ -1527,10 +1527,8 @@ void block_thread(struct thread_entry *current, int timeout)
|
|||
* INTERNAL: Intended for use by kernel objects and not for programs.
|
||||
*---------------------------------------------------------------------------
|
||||
*/
|
||||
unsigned int thread_queue_wake(struct thread_entry **list,
|
||||
volatile int *count)
|
||||
unsigned int thread_queue_wake(struct thread_entry **list)
|
||||
{
|
||||
int num = 0;
|
||||
unsigned result = THREAD_NONE;
|
||||
|
||||
for (;;)
|
||||
|
@ -1541,12 +1539,8 @@ unsigned int thread_queue_wake(struct thread_entry **list,
|
|||
break; /* No more threads */
|
||||
|
||||
result |= rc;
|
||||
num++;
|
||||
}
|
||||
|
||||
if (count)
|
||||
*count = num;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -1821,7 +1815,7 @@ static inline void thread_final_exit(struct thread_entry *current)
|
|||
* execution except the slot itself. */
|
||||
|
||||
/* Signal this thread */
|
||||
thread_queue_wake(¤t->queue, NULL);
|
||||
thread_queue_wake(¤t->queue);
|
||||
corelock_unlock(¤t->waiter_cl);
|
||||
switch_thread();
|
||||
/* This should never and must never be reached - if it is, the
|
||||
|
|
|
@ -439,11 +439,9 @@ unsigned int wakeup_thread_(struct thread_entry **list)
|
|||
return THREAD_NONE;
|
||||
}
|
||||
|
||||
unsigned int thread_queue_wake(struct thread_entry **list,
|
||||
volatile int *count)
|
||||
unsigned int thread_queue_wake(struct thread_entry **list)
|
||||
{
|
||||
unsigned int result = THREAD_NONE;
|
||||
int num = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
@ -453,12 +451,8 @@ unsigned int thread_queue_wake(struct thread_entry **list,
|
|||
break;
|
||||
|
||||
result |= rc;
|
||||
num++;
|
||||
}
|
||||
|
||||
if (count)
|
||||
*count = num;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -621,7 +615,7 @@ void remove_thread(unsigned int thread_id)
|
|||
|
||||
new_thread_id(thread->id, thread);
|
||||
thread->state = STATE_KILLED;
|
||||
thread_queue_wake(&thread->queue, NULL);
|
||||
thread_queue_wake(&thread->queue);
|
||||
|
||||
SDL_DestroySemaphore(s);
|
||||
|
||||
|
|
Loading…
Reference in a new issue