diff options
author | Anton Kling <anton@kling.gg> | 2024-04-02 09:17:06 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-04-02 09:39:03 +0200 |
commit | 2229fd91f7230ae7068814ae029b733945852eb1 (patch) | |
tree | 416487f8c66c389c57dee465f648362ca59b8f23 /kernel/sched/scheduler.c | |
parent | 7eceb43433634ee253507208baf1d8298b40e377 (diff) |
Kernel: Fix some memory leaks
Diffstat (limited to 'kernel/sched/scheduler.c')
-rw-r--r-- | kernel/sched/scheduler.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c index 7afd203..2fa9ad3 100644 --- a/kernel/sched/scheduler.c +++ b/kernel/sched/scheduler.c @@ -213,6 +213,10 @@ void free_process(process_t *p) { list_free(&p->read_list); list_free(&p->write_list); list_free(&p->disconnect_list); + list_free(&p->tcp_sockets); + list_free(&p->tcp_listen); + list_free(&p->event_queue); + kfree(p->tcb); } void exit_process(process_t *p, int status) { @@ -291,7 +295,8 @@ u32 setup_stack(u32 stack_pointer, int argc, char **argv) { return ptr; } -int exec(const char *filename, char **argv) { +int exec(const char *filename, char **argv, int dealloc_argv, + int dealloc_filename) { // exec() will "takeover" the process by loading the file specified in // filename into memory, change from ring 0 to ring 3 and jump to the // files entry point as decided by the ELF header of the file. @@ -313,6 +318,15 @@ int exec(const char *filename, char **argv) { u32 ptr = setup_stack(0x90000000, argc, argv); + if (dealloc_argv) { + for (int i = 0; i < argc; i++) { + kfree(argv[i]); + } + } + if (dealloc_filename) { + kfree((char *)filename); + } + jump_usermode((void (*)())(entry), ptr); ASSERT_NOT_REACHED; return 0; @@ -475,6 +489,13 @@ void signal_process(process_t *p, int sig) { process_push_signal(p, signal); } +int process_signal(vfs_fd_t *fd, int sig) { + process_t *p = fd->inode->internal_object; + assert(p); + signal_process(p, sig); + return 0; +} + int kill(pid_t pid, int sig) { process_t *p = current_task; p = p->next; |