Fix threadsafe event removal.

This commit is contained in:
Unknown W. Brackets 2013-08-05 00:22:47 -07:00
parent 0dc6bab9ff
commit 7dfee29d49

View file

@ -337,7 +337,10 @@ s64 UnscheduleThreadsafeEvent(int event_type, u64 userdata)
} }
} }
if (!tsFirst) if (!tsFirst)
{
tsLast = NULL;
return result; return result;
}
Event *prev = tsFirst; Event *prev = tsFirst;
Event *ptr = prev->next; Event *ptr = prev->next;
@ -348,6 +351,8 @@ s64 UnscheduleThreadsafeEvent(int event_type, u64 userdata)
result = ptr->time - globalTimer; result = ptr->time - globalTimer;
prev->next = ptr->next; prev->next = ptr->next;
if (ptr == tsLast)
tsLast = prev;
FreeTsEvent(ptr); FreeTsEvent(ptr);
ptr = prev->next; ptr = prev->next;
} }
@ -439,6 +444,7 @@ void RemoveThreadsafeEvent(int event_type)
} }
if (!tsFirst) if (!tsFirst)
{ {
tsLast = NULL;
return; return;
} }
Event *prev = tsFirst; Event *prev = tsFirst;
@ -448,6 +454,8 @@ void RemoveThreadsafeEvent(int event_type)
if (ptr->type == event_type) if (ptr->type == event_type)
{ {
prev->next = ptr->next; prev->next = ptr->next;
if (ptr == tsLast)
tsLast = prev;
FreeTsEvent(ptr); FreeTsEvent(ptr);
ptr = prev->next; ptr = prev->next;
} }