From a35cc229903441e03d01351defcb885b88781e78 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Tue, 24 Feb 2026 22:42:41 +0100 Subject: [PATCH] some fixes for ipc --- kernel/syscall/skeleton.cc | 11 ++++++++--- user/app1/appl.cc | 22 ++++++++++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index c314a25..738a840 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -291,7 +291,7 @@ bool copy_from_phys(Vault& vault, uintptr_t phys_ptr, void* virt_ptr, size_t siz size_t offset = Page::offset(phys_ptr); size_t total_size = size + offset; - four_lvl_paging_t* search_table = vault.scheduler.active()->paging_tree; + four_lvl_paging_t* search_table = vault.scheduler.active()->paging_tree; void* virt_addr = getFreeVirtSpace(search_table, (total_size/4096)+1); // page aligned pointer if (virt_addr == nullptr) { @@ -303,7 +303,7 @@ bool copy_from_phys(Vault& vault, uintptr_t phys_ptr, void* virt_ptr, size_t siz } memcpy(virt_ptr, (void*)((uintptr_t)(virt_addr)+ (uintptr_t)offset), size); - PageFrameAllocator::free((uintptr_t)(virt_addr)); + setMapping((uintptr_t)(virt_addr), 0, search_table); return true; } @@ -357,8 +357,9 @@ int receive(Vault& v, void* buffer, size_t size) { IpcStruct* ipc = thread->ipc_queue.first(); if (ipc == nullptr) return -1; + size_t copy_len = (size < ipc->size) ? size:ipc->size; // Buffer holen - if (!copy_from_phys(v, ipc->ptr, buffer, size)) { + if (!copy_from_phys(v, ipc->ptr, buffer, copy_len)) { return -3; } @@ -370,6 +371,10 @@ bool reply(Vault& v, const void* buffer, size_t size) { Thread* current_thread = v.scheduler.active(); IpcStruct* ipc = current_thread->ipc_queue.dequeue(); + //noting to reply to + if(!ipc) + return false; + // if (!ipc || ipc->pid < 0 || static_cast(ipc->pid) >= v.thread_count) return false; Thread* other_thread = v.thread_list[ipc->pid]; diff --git a/user/app1/appl.cc b/user/app1/appl.cc index 8cd7168..44976bd 100644 --- a/user/app1/appl.cc +++ b/user/app1/appl.cc @@ -46,22 +46,24 @@ extern "C" void main() { //sys_test(1,2,3,4,5); unsigned id = sys_getpid(); - char text[] = "appX"; + char text[] = "appX "; text[3] = 0x30+id; write(1, text, sizeof(text), 0, (int)id); uint8_t cnt = 0; for (unsigned i = 1;; ++i) { - if(id == 2){ - send(4, text, strlen(text), text, 5); - write(1, text, strlen(text), 25, (int)id); - } - if(id == 4){ - char blubb[10]; - receive(blubb, 10); - write(1, blubb, strlen(blubb), 25, (int)id); - reply("toast", 5); + if(i%10 == 0){ + if(id == 2){ + send(4, text, strlen(text), text, 5); + write(1, text, strlen(text), 25, (int)id); + } + if(id == 4){ + char blubb[10]; + receive(blubb, 10); + write(1, blubb, strlen(blubb), 25, (int)id); + reply("toast", 5); + } } //counter to see app running