void RemoveThreadsafeEvent(int event_type) { std::lock_guard<std::recursive_mutex> lock(external_event_section); if (!ts_first) return; while (ts_first) { if (ts_first->type == event_type) { Event* next = ts_first->next; FreeTsEvent(ts_first); ts_first = next; } else { break; } } if (!ts_first) { ts_last = nullptr; return; } Event* prev = ts_first; Event* next = prev->next; while (next) { if (next->type == event_type) { prev->next = next->next; if (next == ts_last) ts_last = prev; FreeTsEvent(next); next = prev->next; } else { prev = next; next = next->next; } } }
s64 UnscheduleThreadsafeEvent(int event_type, u64 userdata) { s64 result = 0; std::lock_guard<std::recursive_mutex> lk(externalEventSection); if (!tsFirst) return result; while(tsFirst) { if (tsFirst->type == event_type && tsFirst->userdata == userdata) { result = tsFirst->time - globalTimer; Event *next = tsFirst->next; FreeTsEvent(tsFirst); tsFirst = next; } else { break; } } if (!tsFirst) { tsLast = NULL; return result; } Event *prev = tsFirst; Event *ptr = prev->next; while (ptr) { if (ptr->type == event_type && ptr->userdata == userdata) { result = ptr->time - globalTimer; prev->next = ptr->next; if (ptr == tsLast) tsLast = prev; FreeTsEvent(ptr); ptr = prev->next; } else { prev = ptr; ptr = ptr->next; } } return result; }
void RemoveThreadsafeEvent(int event_type) { std::lock_guard<std::recursive_mutex> lk(externalEventSection); if (!tsFirst) { return; } while(tsFirst) { if (tsFirst->type == event_type) { Event *next = tsFirst->next; FreeTsEvent(tsFirst); tsFirst = next; } else { break; } } if (!tsFirst) { tsLast = NULL; return; } Event *prev = tsFirst; Event *ptr = prev->next; while (ptr) { if (ptr->type == event_type) { prev->next = ptr->next; if (ptr == tsLast) tsLast = prev; FreeTsEvent(ptr); ptr = prev->next; } else { prev = ptr; ptr = ptr->next; } } }
s64 UnscheduleThreadsafeEvent(int event_type, u64 userdata) { s64 result = 0; std::lock_guard<std::recursive_mutex> lock(external_event_section); if (!ts_first) return result; while (ts_first) { if (ts_first->type == event_type && ts_first->userdata == userdata) { result = ts_first->time - GetTicks(); Event* next = ts_first->next; FreeTsEvent(ts_first); ts_first = next; } else { break; } } if (!ts_first) { ts_last = nullptr; return result; } Event* prev_event = ts_first; Event* next = prev_event->next; while (next) { if (next->type == event_type && next->userdata == userdata) { result = next->time - GetTicks(); prev_event->next = next->next; if (next == ts_last) ts_last = prev_event; FreeTsEvent(next); next = prev_event->next; } else { prev_event = next; next = next->next; } } return result; }