svr4_signal.c (107839) | svr4_signal.c (107849) |
---|---|
1/* 2 * Copyright (c) 1998 Mark Newton 3 * Copyright (c) 1994 Christos Zoulas 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * | 1/* 2 * Copyright (c) 1998 Mark Newton 3 * Copyright (c) 1994 Christos Zoulas 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * |
28 * $FreeBSD: head/sys/compat/svr4/svr4_signal.c 107839 2002-12-13 22:41:47Z alfred $ | 28 * $FreeBSD: head/sys/compat/svr4/svr4_signal.c 107849 2002-12-14 01:56:26Z alfred $ |
29 */ 30 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/filedesc.h> 34#include <sys/lock.h> 35#include <sys/mutex.h> 36#include <sys/proc.h> --- 227 unchanged lines hidden (view full) --- 264{ 265 struct svr4_sigaction *nisa, *oisa, tmpisa; 266 struct sigaction *nbsa, *obsa, tmpbsa; 267 struct sigaction_args sa; 268 caddr_t sg; 269 int error; 270 271 DPRINTF(("@@@ svr4_sys_sigaction(%d, %d, %d)\n", td->td_proc->p_pid, | 29 */ 30 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/filedesc.h> 34#include <sys/lock.h> 35#include <sys/mutex.h> 36#include <sys/proc.h> --- 227 unchanged lines hidden (view full) --- 264{ 265 struct svr4_sigaction *nisa, *oisa, tmpisa; 266 struct sigaction *nbsa, *obsa, tmpbsa; 267 struct sigaction_args sa; 268 caddr_t sg; 269 int error; 270 271 DPRINTF(("@@@ svr4_sys_sigaction(%d, %d, %d)\n", td->td_proc->p_pid, |
272 SCARG(uap, signum), 273 SVR4_SVR42BSD_SIG(SCARG(uap, signum)))); | 272 uap->signum, 273 SVR4_SVR42BSD_SIG(uap->signum))); |
274 275 sg = stackgap_init(); | 274 275 sg = stackgap_init(); |
276 nisa = SCARG(uap, nsa); 277 oisa = SCARG(uap, osa); | 276 nisa = uap->nsa; 277 oisa = uap->osa; |
278 279 if (oisa != NULL) 280 obsa = stackgap_alloc(&sg, sizeof(struct sigaction)); 281 else 282 obsa = NULL; 283 284 if (nisa != NULL) { 285 nbsa = stackgap_alloc(&sg, sizeof(struct sigaction)); --- 10 unchanged lines hidden (view full) --- 296 int i; 297 for (i = 0; i < 4; i++) 298 DPRINTF(("\tssa_mask[%d] = %lx\n", i, 299 nisa->ssa_mask.bits[i])); 300 DPRINTF(("\tssa_handler = %p\n", nisa->ssa_handler)); 301 } 302#endif 303 | 278 279 if (oisa != NULL) 280 obsa = stackgap_alloc(&sg, sizeof(struct sigaction)); 281 else 282 obsa = NULL; 283 284 if (nisa != NULL) { 285 nbsa = stackgap_alloc(&sg, sizeof(struct sigaction)); --- 10 unchanged lines hidden (view full) --- 296 int i; 297 for (i = 0; i < 4; i++) 298 DPRINTF(("\tssa_mask[%d] = %lx\n", i, 299 nisa->ssa_mask.bits[i])); 300 DPRINTF(("\tssa_handler = %p\n", nisa->ssa_handler)); 301 } 302#endif 303 |
304 SCARG(&sa, sig) = SVR4_SVR42BSD_SIG(SCARG(uap, signum)); 305 SCARG(&sa, act) = nbsa; 306 SCARG(&sa, oact) = obsa; | 304 sa.sig = SVR4_SVR42BSD_SIG(uap->signum); 305 sa.act = nbsa; 306 sa.oact = obsa; |
307 308 if ((error = sigaction(td, &sa)) != 0) 309 return error; 310 311 if (oisa != NULL) { 312 if ((error = copyin(obsa, &tmpbsa, sizeof(tmpbsa))) != 0) 313 return error; 314 bsd_to_svr4_sigaction(&tmpbsa, &tmpisa); --- 12 unchanged lines hidden (view full) --- 327 struct svr4_sigaltstack *nsss, *osss, tmpsss; 328 struct sigaltstack *nbss, *obss, tmpbss; 329 struct sigaltstack_args sa; 330 caddr_t sg; 331 int error, *retval; 332 333 retval = td->td_retval; 334 sg = stackgap_init(); | 307 308 if ((error = sigaction(td, &sa)) != 0) 309 return error; 310 311 if (oisa != NULL) { 312 if ((error = copyin(obsa, &tmpbsa, sizeof(tmpbsa))) != 0) 313 return error; 314 bsd_to_svr4_sigaction(&tmpbsa, &tmpisa); --- 12 unchanged lines hidden (view full) --- 327 struct svr4_sigaltstack *nsss, *osss, tmpsss; 328 struct sigaltstack *nbss, *obss, tmpbss; 329 struct sigaltstack_args sa; 330 caddr_t sg; 331 int error, *retval; 332 333 retval = td->td_retval; 334 sg = stackgap_init(); |
335 nsss = SCARG(uap, nss); 336 osss = SCARG(uap, oss); | 335 nsss = uap->nss; 336 osss = uap->oss; |
337 338 if (osss != NULL) 339 obss = stackgap_alloc(&sg, sizeof(struct sigaltstack)); 340 else 341 obss = NULL; 342 343 if (nsss != NULL) { 344 nbss = stackgap_alloc(&sg, sizeof(struct sigaltstack)); 345 if ((error = copyin(nsss, &tmpsss, sizeof(tmpsss))) != 0) 346 return error; 347 svr4_to_bsd_sigaltstack(&tmpsss, &tmpbss); 348 if ((error = copyout(&tmpbss, nbss, sizeof(tmpbss))) != 0) 349 return error; 350 } else 351 nbss = NULL; 352 | 337 338 if (osss != NULL) 339 obss = stackgap_alloc(&sg, sizeof(struct sigaltstack)); 340 else 341 obss = NULL; 342 343 if (nsss != NULL) { 344 nbss = stackgap_alloc(&sg, sizeof(struct sigaltstack)); 345 if ((error = copyin(nsss, &tmpsss, sizeof(tmpsss))) != 0) 346 return error; 347 svr4_to_bsd_sigaltstack(&tmpsss, &tmpbss); 348 if ((error = copyout(&tmpbss, nbss, sizeof(tmpbss))) != 0) 349 return error; 350 } else 351 nbss = NULL; 352 |
353 SCARG(&sa, ss) = nbss; 354 SCARG(&sa, oss) = obss; | 353 sa.ss = nbss; 354 sa.oss = obss; |
355 356 if ((error = sigaltstack(td, &sa)) != 0) 357 return error; 358 359 if (obss != NULL) { 360 if ((error = copyin(obss, &tmpbss, sizeof(tmpbss))) != 0) 361 return error; 362 bsd_to_svr4_sigaltstack(&tmpbss, &tmpsss); --- 13 unchanged lines hidden (view full) --- 376 struct svr4_sys_signal_args *uap; 377{ 378 int signum; 379 int error, *retval = td->td_retval; 380 caddr_t sg = stackgap_init(); 381 382 DPRINTF(("@@@ svr4_sys_signal(%d)\n", td->td_proc->p_pid)); 383 | 355 356 if ((error = sigaltstack(td, &sa)) != 0) 357 return error; 358 359 if (obss != NULL) { 360 if ((error = copyin(obss, &tmpbss, sizeof(tmpbss))) != 0) 361 return error; 362 bsd_to_svr4_sigaltstack(&tmpbss, &tmpsss); --- 13 unchanged lines hidden (view full) --- 376 struct svr4_sys_signal_args *uap; 377{ 378 int signum; 379 int error, *retval = td->td_retval; 380 caddr_t sg = stackgap_init(); 381 382 DPRINTF(("@@@ svr4_sys_signal(%d)\n", td->td_proc->p_pid)); 383 |
384 signum = SVR4_SVR42BSD_SIG(SVR4_SIGNO(SCARG(uap, signum))); | 384 signum = SVR4_SVR42BSD_SIG(SVR4_SIGNO(uap->signum)); |
385 if (signum <= 0 || signum > SVR4_NSIG) 386 return (EINVAL); 387 | 385 if (signum <= 0 || signum > SVR4_NSIG) 386 return (EINVAL); 387 |
388 switch (SVR4_SIGCALL(SCARG(uap, signum))) { | 388 switch (SVR4_SIGCALL(uap->signum)) { |
389 case SVR4_SIGDEFER_MASK: | 389 case SVR4_SIGDEFER_MASK: |
390 if (SCARG(uap, handler) == SVR4_SIG_HOLD) | 390 if (uap->handler == SVR4_SIG_HOLD) |
391 goto sighold; 392 /* FALLTHROUGH */ 393 394 case SVR4_SIGNAL_MASK: 395 { 396 struct sigaction_args sa_args; 397 struct sigaction *nbsa, *obsa, sa; 398 399 nbsa = stackgap_alloc(&sg, sizeof(struct sigaction)); 400 obsa = stackgap_alloc(&sg, sizeof(struct sigaction)); | 391 goto sighold; 392 /* FALLTHROUGH */ 393 394 case SVR4_SIGNAL_MASK: 395 { 396 struct sigaction_args sa_args; 397 struct sigaction *nbsa, *obsa, sa; 398 399 nbsa = stackgap_alloc(&sg, sizeof(struct sigaction)); 400 obsa = stackgap_alloc(&sg, sizeof(struct sigaction)); |
401 SCARG(&sa_args, sig) = signum; 402 SCARG(&sa_args, act) = nbsa; 403 SCARG(&sa_args, oact) = obsa; | 401 sa_args.sig = signum; 402 sa_args.act = nbsa; 403 sa_args.oact = obsa; |
404 | 404 |
405 sa.sa_handler = (sig_t) SCARG(uap, handler); | 405 sa.sa_handler = (sig_t) uap->handler; |
406 SIGEMPTYSET(sa.sa_mask); 407 sa.sa_flags = 0; 408 409 if (signum != SIGALRM) 410 sa.sa_flags = SA_RESTART; 411 412 if ((error = copyout(&sa, nbsa, sizeof(sa))) != 0) 413 return error; --- 13 unchanged lines hidden (view full) --- 427sighold: 428 { 429 struct sigprocmask_args sa; 430 sigset_t *set; 431 432 set = stackgap_alloc(&sg, sizeof(sigset_t)); 433 SIGEMPTYSET(*set); 434 SIGADDSET(*set, signum); | 406 SIGEMPTYSET(sa.sa_mask); 407 sa.sa_flags = 0; 408 409 if (signum != SIGALRM) 410 sa.sa_flags = SA_RESTART; 411 412 if ((error = copyout(&sa, nbsa, sizeof(sa))) != 0) 413 return error; --- 13 unchanged lines hidden (view full) --- 427sighold: 428 { 429 struct sigprocmask_args sa; 430 sigset_t *set; 431 432 set = stackgap_alloc(&sg, sizeof(sigset_t)); 433 SIGEMPTYSET(*set); 434 SIGADDSET(*set, signum); |
435 SCARG(&sa, how) = SIG_BLOCK; 436 SCARG(&sa, set) = set; 437 SCARG(&sa, oset) = NULL; | 435 sa.how = SIG_BLOCK; 436 sa.set = set; 437 sa.oset = NULL; |
438 return sigprocmask(td, &sa); 439 } 440 441 case SVR4_SIGRELSE_MASK: 442 { 443 struct sigprocmask_args sa; 444 sigset_t *set; 445 446 set = stackgap_alloc(&sg, sizeof(sigset_t)); 447 SIGEMPTYSET(*set); 448 SIGADDSET(*set, signum); | 438 return sigprocmask(td, &sa); 439 } 440 441 case SVR4_SIGRELSE_MASK: 442 { 443 struct sigprocmask_args sa; 444 sigset_t *set; 445 446 set = stackgap_alloc(&sg, sizeof(sigset_t)); 447 SIGEMPTYSET(*set); 448 SIGADDSET(*set, signum); |
449 SCARG(&sa, how) = SIG_UNBLOCK; 450 SCARG(&sa, set) = set; 451 SCARG(&sa, oset) = NULL; | 449 sa.how = SIG_UNBLOCK; 450 sa.set = set; 451 sa.oset = NULL; |
452 return sigprocmask(td, &sa); 453 } 454 455 case SVR4_SIGIGNORE_MASK: 456 { 457 struct sigaction_args sa_args; 458 struct sigaction *bsa, sa; 459 460 bsa = stackgap_alloc(&sg, sizeof(struct sigaction)); | 452 return sigprocmask(td, &sa); 453 } 454 455 case SVR4_SIGIGNORE_MASK: 456 { 457 struct sigaction_args sa_args; 458 struct sigaction *bsa, sa; 459 460 bsa = stackgap_alloc(&sg, sizeof(struct sigaction)); |
461 SCARG(&sa_args, sig) = signum; 462 SCARG(&sa_args, act) = bsa; 463 SCARG(&sa_args, oact) = NULL; | 461 sa_args.sig = signum; 462 sa_args.act = bsa; 463 sa_args.oact = NULL; |
464 465 sa.sa_handler = SIG_IGN; 466 SIGEMPTYSET(sa.sa_mask); 467 sa.sa_flags = 0; 468 if ((error = copyout(&sa, bsa, sizeof(sa))) != 0) 469 return error; 470 if ((error = sigaction(td, &sa_args)) != 0) { 471 DPRINTF(("sigignore: sigaction failed\n")); --- 7 unchanged lines hidden (view full) --- 479 struct sigsuspend_args sa; 480 sigset_t *set; 481 482 set = stackgap_alloc(&sg, sizeof(sigset_t)); 483 PROC_LOCK(td->td_proc); 484 *set = td->td_proc->p_sigmask; 485 PROC_UNLOCK(td->td_proc); 486 SIGDELSET(*set, signum); | 464 465 sa.sa_handler = SIG_IGN; 466 SIGEMPTYSET(sa.sa_mask); 467 sa.sa_flags = 0; 468 if ((error = copyout(&sa, bsa, sizeof(sa))) != 0) 469 return error; 470 if ((error = sigaction(td, &sa_args)) != 0) { 471 DPRINTF(("sigignore: sigaction failed\n")); --- 7 unchanged lines hidden (view full) --- 479 struct sigsuspend_args sa; 480 sigset_t *set; 481 482 set = stackgap_alloc(&sg, sizeof(sigset_t)); 483 PROC_LOCK(td->td_proc); 484 *set = td->td_proc->p_sigmask; 485 PROC_UNLOCK(td->td_proc); 486 SIGDELSET(*set, signum); |
487 SCARG(&sa, sigmask) = set; | 487 sa.sigmask = set; |
488 return sigsuspend(td, &sa); 489 } 490 491 default: 492 return (ENOSYS); 493 } 494} 495 496 497int 498svr4_sys_sigprocmask(td, uap) 499 struct thread *td; 500 struct svr4_sys_sigprocmask_args *uap; 501{ 502 svr4_sigset_t sss; 503 sigset_t bss; 504 int error = 0, *retval; 505 506 retval = td->td_retval; | 488 return sigsuspend(td, &sa); 489 } 490 491 default: 492 return (ENOSYS); 493 } 494} 495 496 497int 498svr4_sys_sigprocmask(td, uap) 499 struct thread *td; 500 struct svr4_sys_sigprocmask_args *uap; 501{ 502 svr4_sigset_t sss; 503 sigset_t bss; 504 int error = 0, *retval; 505 506 retval = td->td_retval; |
507 if (SCARG(uap, oset) != NULL) { | 507 if (uap->oset != NULL) { |
508 /* Fix the return value first if needed */ 509 PROC_LOCK(td->td_proc); 510 bsd_to_svr4_sigset(&td->td_proc->p_sigmask, &sss); 511 PROC_UNLOCK(td->td_proc); | 508 /* Fix the return value first if needed */ 509 PROC_LOCK(td->td_proc); 510 bsd_to_svr4_sigset(&td->td_proc->p_sigmask, &sss); 511 PROC_UNLOCK(td->td_proc); |
512 if ((error = copyout(&sss, SCARG(uap, oset), sizeof(sss))) != 0) | 512 if ((error = copyout(&sss, uap->oset, sizeof(sss))) != 0) |
513 return error; 514 } 515 | 513 return error; 514 } 515 |
516 if (SCARG(uap, set) == NULL) | 516 if (uap->set == NULL) |
517 /* Just examine */ 518 return 0; 519 | 517 /* Just examine */ 518 return 0; 519 |
520 if ((error = copyin(SCARG(uap, set), &sss, sizeof(sss))) != 0) | 520 if ((error = copyin(uap->set, &sss, sizeof(sss))) != 0) |
521 return error; 522 523 svr4_to_bsd_sigset(&sss, &bss); 524 525 PROC_LOCK(td->td_proc); | 521 return error; 522 523 svr4_to_bsd_sigset(&sss, &bss); 524 525 PROC_LOCK(td->td_proc); |
526 switch (SCARG(uap, how)) { | 526 switch (uap->how) { |
527 case SVR4_SIG_BLOCK: 528 SIGSETOR(td->td_proc->p_sigmask, bss); 529 SIG_CANTMASK(td->td_proc->p_sigmask); 530 break; 531 532 case SVR4_SIG_UNBLOCK: 533 SIGSETNAND(td->td_proc->p_sigmask, bss); 534 signotify(td->td_proc); --- 20 unchanged lines hidden (view full) --- 555 struct svr4_sys_sigpending_args *uap; 556{ 557 sigset_t bss; 558 int *retval; 559 svr4_sigset_t sss; 560 561 DPRINTF(("@@@ svr4_sys_sigpending(%d)\n", td->td_proc->p_pid)); 562 retval = td->td_retval; | 527 case SVR4_SIG_BLOCK: 528 SIGSETOR(td->td_proc->p_sigmask, bss); 529 SIG_CANTMASK(td->td_proc->p_sigmask); 530 break; 531 532 case SVR4_SIG_UNBLOCK: 533 SIGSETNAND(td->td_proc->p_sigmask, bss); 534 signotify(td->td_proc); --- 20 unchanged lines hidden (view full) --- 555 struct svr4_sys_sigpending_args *uap; 556{ 557 sigset_t bss; 558 int *retval; 559 svr4_sigset_t sss; 560 561 DPRINTF(("@@@ svr4_sys_sigpending(%d)\n", td->td_proc->p_pid)); 562 retval = td->td_retval; |
563 switch (SCARG(uap, what)) { | 563 switch (uap->what) { |
564 case 1: /* sigpending */ | 564 case 1: /* sigpending */ |
565 if (SCARG(uap, mask) == NULL) | 565 if (uap->mask == NULL) |
566 return 0; 567 PROC_LOCK(td->td_proc); 568 bss = td->td_proc->p_siglist; 569 SIGSETAND(bss, td->td_proc->p_sigmask); 570 PROC_UNLOCK(td->td_proc); 571 bsd_to_svr4_sigset(&bss, &sss); 572 break; 573 --- 7 unchanged lines hidden (view full) --- 581 } 582#endif 583 break; 584 585 default: 586 return EINVAL; 587 } 588 | 566 return 0; 567 PROC_LOCK(td->td_proc); 568 bss = td->td_proc->p_siglist; 569 SIGSETAND(bss, td->td_proc->p_sigmask); 570 PROC_UNLOCK(td->td_proc); 571 bsd_to_svr4_sigset(&bss, &sss); 572 break; 573 --- 7 unchanged lines hidden (view full) --- 581 } 582#endif 583 break; 584 585 default: 586 return EINVAL; 587 } 588 |
589 return copyout(&sss, SCARG(uap, mask), sizeof(sss)); | 589 return copyout(&sss, uap->mask, sizeof(sss)); |
590} 591 592int 593svr4_sys_sigsuspend(td, uap) 594 register struct thread *td; 595 struct svr4_sys_sigsuspend_args *uap; 596{ 597 svr4_sigset_t sss; 598 sigset_t *bss; 599 struct sigsuspend_args sa; 600 int error; 601 caddr_t sg = stackgap_init(); 602 | 590} 591 592int 593svr4_sys_sigsuspend(td, uap) 594 register struct thread *td; 595 struct svr4_sys_sigsuspend_args *uap; 596{ 597 svr4_sigset_t sss; 598 sigset_t *bss; 599 struct sigsuspend_args sa; 600 int error; 601 caddr_t sg = stackgap_init(); 602 |
603 if ((error = copyin(SCARG(uap, ss), &sss, sizeof(sss))) != 0) | 603 if ((error = copyin(uap->ss, &sss, sizeof(sss))) != 0) |
604 return error; 605 606 bss = stackgap_alloc(&sg, sizeof(sigset_t)); 607 svr4_to_bsd_sigset(&sss, bss); 608 | 604 return error; 605 606 bss = stackgap_alloc(&sg, sizeof(sigset_t)); 607 svr4_to_bsd_sigset(&sss, bss); 608 |
609 SCARG(&sa, sigmask) = bss; | 609 sa.sigmask = bss; |
610 return sigsuspend(td, &sa); 611} 612 613 614int 615svr4_sys_kill(td, uap) 616 register struct thread *td; 617 struct svr4_sys_kill_args *uap; 618{ 619 struct kill_args ka; 620 | 610 return sigsuspend(td, &sa); 611} 612 613 614int 615svr4_sys_kill(td, uap) 616 register struct thread *td; 617 struct svr4_sys_kill_args *uap; 618{ 619 struct kill_args ka; 620 |
621 SCARG(&ka, pid) = SCARG(uap, pid); 622 SCARG(&ka, signum) = SVR4_SVR42BSD_SIG(SCARG(uap, signum)); | 621 ka.pid = uap->pid; 622 ka.signum = SVR4_SVR42BSD_SIG(uap->signum); |
623 return kill(td, &ka); 624} 625 626 627int 628svr4_sys_context(td, uap) 629 register struct thread *td; 630 struct svr4_sys_context_args *uap; --- 35 unchanged lines hidden (view full) --- 666 667int 668svr4_sys_pause(td, uap) 669 register struct thread *td; 670 struct svr4_sys_pause_args *uap; 671{ 672 struct sigsuspend_args bsa; 673 | 623 return kill(td, &ka); 624} 625 626 627int 628svr4_sys_context(td, uap) 629 register struct thread *td; 630 struct svr4_sys_context_args *uap; --- 35 unchanged lines hidden (view full) --- 666 667int 668svr4_sys_pause(td, uap) 669 register struct thread *td; 670 struct svr4_sys_pause_args *uap; 671{ 672 struct sigsuspend_args bsa; 673 |
674 SCARG(&bsa, sigmask) = &td->td_proc->p_sigmask; | 674 bsa.sigmask = &td->td_proc->p_sigmask; |
675 return sigsuspend(td, &bsa); 676} | 675 return sigsuspend(td, &bsa); 676} |