| 468 | } |
| 469 | |
| 470 | static void |
| 471 | sigqueue_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 |
| 512 | static void |
no outgoing calls
no test coverage detected