MCPcopy Create free account
hub / github.com/cemu-project/Cemu / IOS_CreateMessageQueue

Function IOS_CreateMessageQueue

src/Cafe/IOSU/kernel/iosu_kernel.cpp:65–90  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63 }
64
65 IOSMsgQueueId IOS_CreateMessageQueue(IOSMessage* messageArray, uint32 messageCount)
66 {
67 std::unique_lock _l(sInternalMutex);
68 cemu_assert(messageCount != 0);
69 auto it = std::find_if(sMsgQueuePool.begin(), sMsgQueuePool.end(), [](const IOSMessageQueue& q) { return q.msgArraySize == 0; });
70 if (it == sMsgQueuePool.end())
71 {
72 cemu_assert_suspicious();
73 return IOS_ERROR_MAXIMUM_REACHED;
74 }
75 size_t index = std::distance(sMsgQueuePool.begin(), it);
76 IOSMessageQueue& msgQueue = sMsgQueuePool.at(index);
77 // create queue handle
78 static uint32 sQueueHandleCounter = 0;
79 uint32 queueHandle = (uint32)index | ((sQueueHandleCounter<<12)&0x7FFFFFFF);
80 sQueueHandleCounter++;
81
82 msgQueue.queueHandle = queueHandle;
83 msgQueue.msgArraySize = messageCount;
84 msgQueue.msgArray = (betype<IOSMessage>*)messageArray;
85
86 msgQueue.numQueuedMessages = 0;
87 msgQueue.readIndex = 0;
88
89 return queueHandle;
90 }
91
92 IOS_ERROR IOS_DestroyMessageQueue(IOSMsgQueueId msgQueueId)
93 {

Callers 5

InitFunction · 0.85
SystemLaunchFunction · 0.85
InitializeFunction · 0.85
ODMServiceThreadFunction · 0.85
ServiceThreadMethod · 0.85

Calls 5

cemu_assertFunction · 0.85
cemu_assert_suspiciousFunction · 0.85
atMethod · 0.80
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected