this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Emulate some of the sigaction flags

+27 -1
+16 -1
src/kernel/emulation/linux/signal/sigaction.c
··· 274 274 275 275 // __simple_printf("Handling signal %d\n", linux_signum); 276 276 277 - sig_handlers[linux_signum](bsd_signum, info ? &binfo : NULL, (lc != NULL) ? &bc : NULL); 277 + bsd_sig_handler* handler = sig_handlers[linux_signum]; 278 + if (sig_flags[linux_signum] & LINUX_SA_RESETHAND) 279 + { 280 + switch (linux_signum) 281 + { 282 + case LINUX_SIGWINCH: 283 + case LINUX_SIGCHLD: 284 + case LINUX_SIGURG: 285 + sig_handlers[linux_signum] = (bsd_sig_handler*) SIG_IGN; 286 + break; 287 + default: 288 + sig_handlers[linux_signum] = NULL; // SIG_DFL 289 + } 290 + } 291 + 292 + handler(bsd_signum, info ? &binfo : NULL, (lc != NULL) ? &bc : NULL); 278 293 279 294 if (lc != NULL) 280 295 {
+11
src/kernel/emulation/linux/signal/sigexc.c
··· 262 262 if (sig_handlers[linux_signum]) 263 263 { 264 264 kern_printf("sigexc: will forward signal to app handler (%p)\n", sig_handlers[linux_signum]); 265 + 266 + // Update the signal mask to what the application actually wanted 267 + linux_sigset_t set = sig_masks[linux_signum]; 268 + 269 + // Keep the current signal blocked, which is the default behavior 270 + if (!(sig_flags[linux_signum] & LINUX_SA_NODEFER)) 271 + set |= (1ull << (linux_signum-1)); 272 + 273 + LINUX_SYSCALL(__NR_rt_sigprocmask, 2 /* LINUX_SIG_SETMASK */, 274 + &set, NULL, sizeof(linux_sigset_t)); 275 + 265 276 handler_linux_to_bsd(linux_signum, info, ctxt); 266 277 } 267 278 else