fix possible crash

This commit is contained in:
Arisotura 2023-12-23 23:59:59 +01:00
parent 989b93c92a
commit de4ae9dd92
1 changed files with 11 additions and 1 deletions

View File

@ -248,7 +248,9 @@ bool Init()
Log(LogLevel::Info, "MP sharedmem doesn't exist. creating\n"); Log(LogLevel::Info, "MP sharedmem doesn't exist. creating\n");
if (!MPQueue->create(kQueueSize)) if (!MPQueue->create(kQueueSize))
{ {
Log(LogLevel::Error, "MP sharedmem create failed :(\n"); Log(LogLevel::Error, "MP sharedmem create failed :( (%d)\n", MPQueue->error());
delete MPQueue;
MPQueue = nullptr;
return false; return false;
} }
@ -328,6 +330,7 @@ void SetRecvTimeout(int timeout)
void Begin() void Begin()
{ {
if (!MPQueue) return;
MPQueue->lock(); MPQueue->lock();
MPQueueHeader* header = (MPQueueHeader*)MPQueue->data(); MPQueueHeader* header = (MPQueueHeader*)MPQueue->data();
PacketReadOffset = header->PacketWriteOffset; PacketReadOffset = header->PacketWriteOffset;
@ -340,6 +343,7 @@ void Begin()
void End() void End()
{ {
if (!MPQueue) return;
MPQueue->lock(); MPQueue->lock();
MPQueueHeader* header = (MPQueueHeader*)MPQueue->data(); MPQueueHeader* header = (MPQueueHeader*)MPQueue->data();
//SemReset(InstanceID); //SemReset(InstanceID);
@ -421,6 +425,7 @@ void FIFOWrite(int fifo, void* buf, int len)
int SendPacketGeneric(u32 type, u8* packet, int len, u64 timestamp) int SendPacketGeneric(u32 type, u8* packet, int len, u64 timestamp)
{ {
if (!MPQueue) return 0;
MPQueue->lock(); MPQueue->lock();
u8* data = (u8*)MPQueue->data(); u8* data = (u8*)MPQueue->data();
MPQueueHeader* header = (MPQueueHeader*)&data[0]; MPQueueHeader* header = (MPQueueHeader*)&data[0];
@ -476,6 +481,7 @@ int SendPacketGeneric(u32 type, u8* packet, int len, u64 timestamp)
int RecvPacketGeneric(u8* packet, bool block, u64* timestamp) int RecvPacketGeneric(u8* packet, bool block, u64* timestamp)
{ {
if (!MPQueue) return 0;
for (;;) for (;;)
{ {
if (!SemWait(InstanceID, block ? RecvTimeout : 0)) if (!SemWait(InstanceID, block ? RecvTimeout : 0))
@ -552,6 +558,8 @@ int SendAck(u8* packet, int len, u64 timestamp)
int RecvHostPacket(u8* packet, u64* timestamp) int RecvHostPacket(u8* packet, u64* timestamp)
{ {
if (!MPQueue) return -1;
if (LastHostID != -1) if (LastHostID != -1)
{ {
// check if the host is still connected // check if the host is still connected
@ -571,6 +579,8 @@ int RecvHostPacket(u8* packet, u64* timestamp)
u16 RecvReplies(u8* packets, u64 timestamp, u16 aidmask) u16 RecvReplies(u8* packets, u64 timestamp, u16 aidmask)
{ {
if (!MPQueue) return 0;
u16 ret = 0; u16 ret = 0;
u16 myinstmask = (1 << InstanceID); u16 myinstmask = (1 << InstanceID);
u16 curinstmask; u16 curinstmask;