From bd4466fbe026ac25f84d88d0306b9745b9bbbe8b Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 31 Jul 2025 00:55:34 +0100 Subject: feat: IPC: use C-lock pattern to retain IPC transfers. Signed-off-by: Amlal El Mahrouss --- dev/kernel/src/Network/IPCMsg.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'dev/kernel/src') diff --git a/dev/kernel/src/Network/IPCMsg.cc b/dev/kernel/src/Network/IPCMsg.cc index 6f54e449..9abefcef 100644 --- a/dev/kernel/src/Network/IPCMsg.cc +++ b/dev/kernel/src/Network/IPCMsg.cc @@ -87,6 +87,8 @@ Bool ipc_construct_packet(_Output IPC_MSG** pckt_in) { (*pckt_in)->IpcFrom.UserProcessID = 0; (*pckt_in)->IpcFrom.UserProcessTeam = 0; + (*pckt_in)->IpcLock = kIPCLockFree; + return Yes; } @@ -103,8 +105,20 @@ Bool IPC_MSG::Pass(IPC_MSG* src, IPC_MSG* target) noexcept { if (src->IpcMsgSz > target->IpcMsgSz) return No; if (target->IpcMsgSz > src->IpcMsgSz) return No; + UInt32 timeout = 0U; + + while ((target->IpcLock % kIPCLockUsed) != 0) { + if (timeout > 100000U) { + return No; + } + } + + ++target->IpcLock; + rt_copy_memory_safe(src->IpcData, target->IpcData, src->IpcMsgSz, kIPCMsgSize); + --target->IpcLock; + return Yes; } -- cgit v1.2.3