Kernel/Thread: Always use the threadsafe option when scheduling wakeups.
WakeAfterDelay might be called from any host thread, so err on the side of caution and use the thread-safe CoreTiming::ScheduleEventThreadsafe. Note that CoreTiming is still far from thread-safe, there may be more things we have to work on for it to be up to par with what we want.
This commit is contained in:
		| @@ -135,11 +135,9 @@ void ClearPendingEvents() { | |||||||
| void ScheduleEvent(s64 cycles_into_future, const EventType* event_type, u64 userdata) { | void ScheduleEvent(s64 cycles_into_future, const EventType* event_type, u64 userdata) { | ||||||
|     ASSERT(event_type != nullptr); |     ASSERT(event_type != nullptr); | ||||||
|     s64 timeout = GetTicks() + cycles_into_future; |     s64 timeout = GetTicks() + cycles_into_future; | ||||||
|  |  | ||||||
|     // If this event needs to be scheduled before the next advance(), force one early |     // If this event needs to be scheduled before the next advance(), force one early | ||||||
|     if (!is_global_timer_sane) |     if (!is_global_timer_sane) | ||||||
|         ForceExceptionCheck(cycles_into_future); |         ForceExceptionCheck(cycles_into_future); | ||||||
|  |  | ||||||
|     event_queue.emplace_back(Event{timeout, event_fifo_id++, userdata, event_type}); |     event_queue.emplace_back(Event{timeout, event_fifo_id++, userdata, event_type}); | ||||||
|     std::push_heap(event_queue.begin(), event_queue.end(), std::greater<>()); |     std::push_heap(event_queue.begin(), event_queue.end(), std::greater<>()); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -155,7 +155,9 @@ void Thread::WakeAfterDelay(s64 nanoseconds) { | |||||||
|     if (nanoseconds == -1) |     if (nanoseconds == -1) | ||||||
|         return; |         return; | ||||||
|  |  | ||||||
|     CoreTiming::ScheduleEvent(CoreTiming::nsToCycles(nanoseconds), ThreadWakeupEventType, |     // This function might be called from any thread so we have to be cautious and use the | ||||||
|  |     // thread-safe version of ScheduleEvent. | ||||||
|  |     CoreTiming::ScheduleEventThreadsafe(CoreTiming::nsToCycles(nanoseconds), ThreadWakeupEventType, | ||||||
|                                         callback_handle); |                                         callback_handle); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user