|
miniOS
x86_64 hobby kernel with SMP, VFS, and POSIX process model
|
#include <miniOS/io.h>#include <miniOS/signal.h>#include <miniOS/sched/sched.h>#include <miniOS/mm/vmm.h>
Functions | |
| void | proc_close_all_sockets (struct thread *t) |
| static int | signal_default_terminates (int sig) |
| void | signal_dispatch (void) |
| void | ring3_invoke_handler (int sig, sighandler_t handler) |
|
extern |
proc_close_all_sockets() - Close all open socket file descriptors for a thread. @t: Thread whose sockets should be closed.
Called directly from sched_exit_current() on every exit path (normal SYS_exit, page faults, signals). signal_dispatch() may also call it before sched_exit_current(); the second call is harmless because freed fds have in_use=0 and are silently skipped.
net_sock_free() handles PCB teardown internally (raw_remove/udp_remove/ tcp_abort + null pcb before in_use=0).


| void ring3_invoke_handler | ( | int | sig, |
| sighandler_t | handler ) |
ring3_invoke_handler() - Set up user stack to invoke a signal handler. @sig: Signal number passed as first argument to handler (RDI per SysV ABI). @handler: User-mode function pointer to invoke.
Modifies the current thread's saved_user_rip to point to @handler and adjusts saved_user_rsp to push the signal number onto the user stack. SYSRET then jumps directly into the handler. Full trampoline (return path via SYS_sigreturn).


|
static |

| void signal_dispatch | ( | void | ) |
signal_dispatch() - Deliver all pending signals before returning to userspace.
Called from syscall.asm immediately before SYSRET. Scans the current thread's pending_signals bitmask (bits 1-31). For SIGKILL and SIGTERM calls sched_exit_current(128 + signum). For other signals invokes the registered handler via ring3_invoke_handler() if a non-default handler is registered, otherwise clears the pending bit and continues.
Context: Called with interrupts disabled (CLI before SYSRET path). Does not return if SIGKILL or SIGTERM is pending.
