From 7f510c6aa50e992c616869a1a3bb45189aa56542 Mon Sep 17 00:00:00 2001 From: boreddevnl Date: Thu, 16 Apr 2026 22:12:20 +0200 Subject: [PATCH] FIX: Race condition causing applications to print to serial out instead of the CLI --- src/sys/process.c | 7 +++---- src/sys/process.h | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/sys/process.c b/src/sys/process.c index 057e048..3261c32 100644 --- a/src/sys/process.c +++ b/src/sys/process.c @@ -179,7 +179,7 @@ process_t* process_create(void (*entry_point)(void), bool is_user) { return new_proc; } -process_t* process_create_elf(const char* filepath, const char* args_str) { +process_t* process_create_elf(const char* filepath, const char* args_str, bool terminal_proc, int tty_id) { uint64_t rflags = spinlock_acquire_irqsave(&runqueue_lock); process_t *new_proc = NULL; @@ -210,8 +210,8 @@ process_t* process_create_elf(const char* filepath, const char* args_str) { new_proc->ui_window = NULL; new_proc->heap_start = 0x20000000; // 512MB mark new_proc->heap_end = 0x20000000; - new_proc->is_terminal_proc = false; - new_proc->tty_id = -1; + new_proc->is_terminal_proc = terminal_proc; + new_proc->tty_id = tty_id; new_proc->kill_pending = false; process_t *parent = process_get_current(); @@ -231,7 +231,6 @@ process_t* process_create_elf(const char* filepath, const char* args_str) { serial_write("[PROC] Failed to load ELF: "); serial_write(filepath); serial_write("\n"); - // We technically leak the page table here, but let's ignore cleanup for now return NULL; } diff --git a/src/sys/process.h b/src/sys/process.h index d014d45..632afc8 100644 --- a/src/sys/process.h +++ b/src/sys/process.h @@ -69,7 +69,7 @@ typedef struct { void process_init(void); process_t* process_create(void (*entry_point)(void), bool is_user); -process_t* process_create_elf(const char* filepath, const char* args_str); +process_t* process_create_elf(const char* filepath, const char* args_str, bool terminal_proc, int tty_id); process_t* process_get_current(void); void process_set_current_for_cpu(uint32_t cpu_id, process_t* p); process_t* process_get_current_for_cpu(uint32_t cpu_id);