Skip to content

Commit

Permalink
Don't ScheduleEvent from wrong thread when inserting SD card
Browse files Browse the repository at this point in the history
  • Loading branch information
JosJuice committed Jul 7, 2016
1 parent 3f03e2d commit fab4352
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions Source/Core/Core/IPC_HLE/WII_IPC_HLE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ They will also generate a true or false return for UpdateInterrupts() in WII_IPC
#include "Common/Thread.h"

#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/CoreTiming.h"
#include "Core/Debugger/Debugger_SymbolMap.h"
#include "Core/HW/CPU.h"
Expand Down Expand Up @@ -76,6 +77,7 @@ static ipc_msg_queue reply_queue; // arm -> ppc
static ipc_msg_queue ack_queue; // arm -> ppc

static int event_enqueue;
static int event_sdio_notify;

static u64 last_reply_time;

Expand All @@ -98,6 +100,14 @@ static void EnqueueEvent(u64 userdata, s64 cycles_late = 0)
Update();
}

void SDIO_EventNotify_CPUThread(u64 userdata, s64 cycles_late)
{
auto device =
static_cast<CWII_IPC_HLE_Device_sdio_slot0*>(GetDeviceByName("/dev/sdio/slot0").get());
if (device)
device->EventNotify();
}

static u32 num_devices;

template <typename T>
Expand Down Expand Up @@ -148,6 +158,7 @@ void Init()
AddDevice<IWII_IPC_HLE_Device>("_Unimplemented_Device_");

event_enqueue = CoreTiming::RegisterEvent("IPCEvent", EnqueueEvent);
event_sdio_notify = CoreTiming::RegisterEvent("SDIO_EventNotify", SDIO_EventNotify_CPUThread);
}

void Reset(bool _bHard)
Expand Down Expand Up @@ -212,10 +223,8 @@ void ES_DIVerify(const std::vector<u8>& tmd)

void SDIO_EventNotify()
{
auto pDevice =
static_cast<CWII_IPC_HLE_Device_sdio_slot0*>(GetDeviceByName("/dev/sdio/slot0").get());
if (pDevice)
pDevice->EventNotify();
if (Core::IsRunning())
CoreTiming::ScheduleEvent_Threadsafe(0, event_sdio_notify);
}

int getFreeDeviceId()
Expand Down

0 comments on commit fab4352

Please sign in to comment.