IOS HLE: Remove s_es_inuse
We don't really have to keep track of device opens/closes manually, since we can already check that by calling IsOpened() on the device. This also replaces some loops with for range loops.
This commit is contained in:
parent
b65ad538ba
commit
9abfa54c9d
|
@ -71,7 +71,6 @@ static std::mutex s_device_map_mutex;
|
|||
#define IPC_MAX_FDS 0x18
|
||||
#define ES_MAX_COUNT 2
|
||||
static std::shared_ptr<IWII_IPC_HLE_Device> s_fdmap[IPC_MAX_FDS];
|
||||
static bool s_es_inuse[ES_MAX_COUNT];
|
||||
static std::shared_ptr<IWII_IPC_HLE_Device> s_es_handles[ES_MAX_COUNT];
|
||||
|
||||
using IPCMsgQueue = std::deque<u32>;
|
||||
|
@ -141,11 +140,8 @@ void Reinit()
|
|||
AddDevice<CWII_IPC_HLE_Device_fs>("/dev/fs");
|
||||
|
||||
// IOS allows two ES devices at a time
|
||||
for (u32 j = 0; j < ES_MAX_COUNT; j++)
|
||||
{
|
||||
s_es_handles[j] = AddDevice<CWII_IPC_HLE_Device_es>("/dev/es");
|
||||
s_es_inuse[j] = false;
|
||||
}
|
||||
for (auto& es_device : s_es_handles)
|
||||
es_device = AddDevice<CWII_IPC_HLE_Device_es>("/dev/es");
|
||||
|
||||
AddDevice<CWII_IPC_HLE_Device_di>("/dev/di");
|
||||
AddDevice<CWII_IPC_HLE_Device_net_kd_request>("/dev/net/kd/request");
|
||||
|
@ -189,11 +185,6 @@ void Reset(bool hard)
|
|||
dev.reset();
|
||||
}
|
||||
|
||||
for (bool& in_use : s_es_inuse)
|
||||
{
|
||||
in_use = false;
|
||||
}
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(s_device_map_mutex);
|
||||
for (const auto& entry : s_device_map)
|
||||
|
@ -329,13 +320,11 @@ void DoState(PointerWrap& p)
|
|||
}
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < ES_MAX_COUNT; i++)
|
||||
for (auto& es_device : s_es_handles)
|
||||
{
|
||||
p.Do(s_es_inuse[i]);
|
||||
u32 handleID = s_es_handles[i]->GetDeviceID();
|
||||
p.Do(handleID);
|
||||
|
||||
s_es_handles[i] = AccessDeviceByID(handleID);
|
||||
const u32 handle_id = es_device->GetDeviceID();
|
||||
p.Do(handle_id);
|
||||
es_device = AccessDeviceByID(handle_id);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -360,25 +349,19 @@ void DoState(PointerWrap& p)
|
|||
}
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < ES_MAX_COUNT; i++)
|
||||
for (const auto& es_device : s_es_handles)
|
||||
{
|
||||
p.Do(s_es_inuse[i]);
|
||||
u32 handleID = s_es_handles[i]->GetDeviceID();
|
||||
p.Do(handleID);
|
||||
const u32 handle_id = es_device->GetDeviceID();
|
||||
p.Do(handle_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static std::shared_ptr<IWII_IPC_HLE_Device> GetUnusedESDevice()
|
||||
{
|
||||
for (u32 es_number = 0; es_number < ES_MAX_COUNT; ++es_number)
|
||||
{
|
||||
if (s_es_inuse[es_number])
|
||||
continue;
|
||||
s_es_inuse[es_number] = true;
|
||||
return s_es_handles[es_number];
|
||||
}
|
||||
return nullptr;
|
||||
const auto iterator = std::find_if(std::begin(s_es_handles), std::end(s_es_handles),
|
||||
[](const auto& es_device) { return !es_device->IsOpened(); });
|
||||
return (iterator != std::end(s_es_handles)) ? *iterator : nullptr;
|
||||
}
|
||||
|
||||
// Returns the FD for the newly opened device (on success) or an error code.
|
||||
|
@ -446,11 +429,6 @@ static IPCCommandResult HandleCommand(const u32 address)
|
|||
switch (command)
|
||||
{
|
||||
case IPC_CMD_CLOSE:
|
||||
for (u32 j = 0; j < ES_MAX_COUNT; j++)
|
||||
{
|
||||
if (s_es_handles[j] == s_fdmap[fd])
|
||||
s_es_inuse[j] = false;
|
||||
}
|
||||
s_fdmap[fd].reset();
|
||||
return device->Close(address);
|
||||
case IPC_CMD_READ:
|
||||
|
|
|
@ -71,7 +71,7 @@ static Common::Event g_compressAndDumpStateSyncEvent;
|
|||
static std::thread g_save_thread;
|
||||
|
||||
// Don't forget to increase this after doing changes on the savestate system
|
||||
static const u32 STATE_VERSION = 65; // Last changed in PR 4120
|
||||
static const u32 STATE_VERSION = 66; // Last changed in PR 4607
|
||||
|
||||
// Maps savestate versions to Dolphin versions.
|
||||
// Versions after 42 don't need to be added to this list,
|
||||
|
|
Loading…
Reference in New Issue