summaryrefslogtreecommitdiff
path: root/kernel/sched
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-10-14 21:42:38 +0200
committerAnton Kling <anton@kling.gg>2024-10-14 21:42:38 +0200
commit87af93c7521be331a5794c6a53f31d13b3a24baa (patch)
tree7807e28e64b17bebd3a5ad4f980fbada3278e6df /kernel/sched
parenta5b508d1fb751015ecb9b6701749dcdcd81e3071 (diff)
kernel: stuff
Diffstat (limited to 'kernel/sched')
-rw-r--r--kernel/sched/scheduler.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/kernel/sched/scheduler.c b/kernel/sched/scheduler.c
index 1285d26..9fec2b7 100644
--- a/kernel/sched/scheduler.c
+++ b/kernel/sched/scheduler.c
@@ -28,14 +28,6 @@ u32 next_pid = 0;
extern u32 read_eip(void);
-process_t *get_current_task(void) {
- return current_task;
-}
-
-process_t *get_ready_queue(void) {
- return ready_queue;
-}
-
void process_push_restore_context(process_t *p, reg_t r) {
if (!p) {
p = current_task;
@@ -535,20 +527,27 @@ process_t *next_task(process_t *s) {
void signal_process(process_t *p, int sig) {
assert(sig < 32);
- kprintf("sending signal to: %x\n", p);
+ int talking_to_itself = (p == current_task);
if (!p->signal_handlers[sig]) {
if (SIGTERM == sig) {
kprintf("HAS NO SIGTERM\n");
exit_process(p, 1 /*TODO: what should the status be?*/);
- ASSERT_NOT_REACHED;
+ if (talking_to_itself) {
+ ASSERT_NOT_REACHED;
+ }
} else if (SIGSEGV == sig) {
kprintf("HAS NO SIGSEGV\n");
exit_process(p, 1 /*TODO: what should the status be?*/);
- ASSERT_NOT_REACHED;
+ if (talking_to_itself) {
+ ASSERT_NOT_REACHED;
+ }
} else {
// TODO: Should also exit proess(I think)
- ASSERT_NOT_REACHED;
+ if (talking_to_itself) {
+ ASSERT_NOT_REACHED;
+ }
}
+ return;
}
signal_t signal = {.handler_ip = (uintptr_t)p->signal_handlers[sig]};
process_push_signal(p, signal);