MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sigqueue_move_set

Function sigqueue_move_set

freebsd/kern/kern_sig.c:470–509  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

468}
469
470static void
471sigqueue_move_set(sigqueue_t *src, sigqueue_t *dst, const sigset_t *set)
472{
473 sigset_t tmp;
474 struct proc *p1, *p2;
475 ksiginfo_t *ksi, *next;
476
477 KASSERT(src->sq_flags & SQ_INIT, ("src sigqueue not inited"));
478 KASSERT(dst->sq_flags & SQ_INIT, ("dst sigqueue not inited"));
479 p1 = src->sq_proc;
480 p2 = dst->sq_proc;
481 /* Move siginfo to target list */
482 TAILQ_FOREACH_SAFE(ksi, &src->sq_list, ksi_link, next) {
483 if (SIGISMEMBER(*set, ksi->ksi_signo)) {
484 TAILQ_REMOVE(&src->sq_list, ksi, ksi_link);
485 if (p1 != NULL)
486 p1->p_pendingcnt--;
487 TAILQ_INSERT_TAIL(&dst->sq_list, ksi, ksi_link);
488 ksi->ksi_sigq = dst;
489 if (p2 != NULL)
490 p2->p_pendingcnt++;
491 }
492 }
493
494 /* Move pending bits to target list */
495 tmp = src->sq_kill;
496 SIGSETAND(tmp, *set);
497 SIGSETOR(dst->sq_kill, tmp);
498 SIGSETNAND(src->sq_kill, tmp);
499
500 tmp = src->sq_ptrace;
501 SIGSETAND(tmp, *set);
502 SIGSETOR(dst->sq_ptrace, tmp);
503 SIGSETNAND(src->sq_ptrace, tmp);
504
505 tmp = src->sq_signals;
506 SIGSETAND(tmp, *set);
507 SIGSETOR(dst->sq_signals, tmp);
508 SIGSETNAND(src->sq_signals, tmp);
509}
510
511#if 0
512static void

Callers 2

sigqueue_moveFunction · 0.85
sigqueue_delete_set_procFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected