491 } |
491 } |
492 |
492 |
493 return interrupted; |
493 return interrupted; |
494 } |
494 } |
495 |
495 |
|
496 |
|
497 |
|
498 static const struct { |
|
499 int sig; const char* name; |
|
500 } |
|
501 g_signal_info[] = |
|
502 { |
|
503 { SIGABRT, "SIGABRT" }, |
|
504 #ifdef SIGAIO |
|
505 { SIGAIO, "SIGAIO" }, |
|
506 #endif |
|
507 { SIGALRM, "SIGALRM" }, |
|
508 #ifdef SIGALRM1 |
|
509 { SIGALRM1, "SIGALRM1" }, |
|
510 #endif |
|
511 { SIGBUS, "SIGBUS" }, |
|
512 #ifdef SIGCANCEL |
|
513 { SIGCANCEL, "SIGCANCEL" }, |
|
514 #endif |
|
515 { SIGCHLD, "SIGCHLD" }, |
|
516 #ifdef SIGCLD |
|
517 { SIGCLD, "SIGCLD" }, |
|
518 #endif |
|
519 { SIGCONT, "SIGCONT" }, |
|
520 #ifdef SIGCPUFAIL |
|
521 { SIGCPUFAIL, "SIGCPUFAIL" }, |
|
522 #endif |
|
523 #ifdef SIGDANGER |
|
524 { SIGDANGER, "SIGDANGER" }, |
|
525 #endif |
|
526 #ifdef SIGDIL |
|
527 { SIGDIL, "SIGDIL" }, |
|
528 #endif |
|
529 #ifdef SIGEMT |
|
530 { SIGEMT, "SIGEMT" }, |
|
531 #endif |
|
532 { SIGFPE, "SIGFPE" }, |
|
533 #ifdef SIGFREEZE |
|
534 { SIGFREEZE, "SIGFREEZE" }, |
|
535 #endif |
|
536 #ifdef SIGGFAULT |
|
537 { SIGGFAULT, "SIGGFAULT" }, |
|
538 #endif |
|
539 #ifdef SIGGRANT |
|
540 { SIGGRANT, "SIGGRANT" }, |
|
541 #endif |
|
542 { SIGHUP, "SIGHUP" }, |
|
543 { SIGILL, "SIGILL" }, |
|
544 { SIGINT, "SIGINT" }, |
|
545 #ifdef SIGIO |
|
546 { SIGIO, "SIGIO" }, |
|
547 #endif |
|
548 #ifdef SIGIOINT |
|
549 { SIGIOINT, "SIGIOINT" }, |
|
550 #endif |
|
551 #ifdef SIGIOT |
|
552 // SIGIOT is there for BSD compatibility, but on most Unices just a |
|
553 // synonym for SIGABRT. The result should be "SIGABRT", not |
|
554 // "SIGIOT". |
|
555 #if (SIGIOT != SIGABRT ) |
|
556 { SIGIOT, "SIGIOT" }, |
|
557 #endif |
|
558 #endif |
|
559 #ifdef SIGKAP |
|
560 { SIGKAP, "SIGKAP" }, |
|
561 #endif |
|
562 { SIGKILL, "SIGKILL" }, |
|
563 #ifdef SIGLOST |
|
564 { SIGLOST, "SIGLOST" }, |
|
565 #endif |
|
566 #ifdef SIGLWP |
|
567 { SIGLWP, "SIGLWP" }, |
|
568 #endif |
|
569 #ifdef SIGLWPTIMER |
|
570 { SIGLWPTIMER, "SIGLWPTIMER" }, |
|
571 #endif |
|
572 #ifdef SIGMIGRATE |
|
573 { SIGMIGRATE, "SIGMIGRATE" }, |
|
574 #endif |
|
575 #ifdef SIGMSG |
|
576 { SIGMSG, "SIGMSG" }, |
|
577 #endif |
|
578 { SIGPIPE, "SIGPIPE" }, |
|
579 #ifdef SIGPOLL |
|
580 { SIGPOLL, "SIGPOLL" }, |
|
581 #endif |
|
582 #ifdef SIGPRE |
|
583 { SIGPRE, "SIGPRE" }, |
|
584 #endif |
|
585 { SIGPROF, "SIGPROF" }, |
|
586 #ifdef SIGPTY |
|
587 { SIGPTY, "SIGPTY" }, |
|
588 #endif |
|
589 #ifdef SIGPWR |
|
590 { SIGPWR, "SIGPWR" }, |
|
591 #endif |
|
592 { SIGQUIT, "SIGQUIT" }, |
|
593 #ifdef SIGRECONFIG |
|
594 { SIGRECONFIG, "SIGRECONFIG" }, |
|
595 #endif |
|
596 #ifdef SIGRECOVERY |
|
597 { SIGRECOVERY, "SIGRECOVERY" }, |
|
598 #endif |
|
599 #ifdef SIGRESERVE |
|
600 { SIGRESERVE, "SIGRESERVE" }, |
|
601 #endif |
|
602 #ifdef SIGRETRACT |
|
603 { SIGRETRACT, "SIGRETRACT" }, |
|
604 #endif |
|
605 #ifdef SIGSAK |
|
606 { SIGSAK, "SIGSAK" }, |
|
607 #endif |
|
608 { SIGSEGV, "SIGSEGV" }, |
|
609 #ifdef SIGSOUND |
|
610 { SIGSOUND, "SIGSOUND" }, |
|
611 #endif |
|
612 #ifdef SIGSTKFLT |
|
613 { SIGSTKFLT, "SIGSTKFLT" }, |
|
614 #endif |
|
615 { SIGSTOP, "SIGSTOP" }, |
|
616 { SIGSYS, "SIGSYS" }, |
|
617 #ifdef SIGSYSERROR |
|
618 { SIGSYSERROR, "SIGSYSERROR" }, |
|
619 #endif |
|
620 #ifdef SIGTALRM |
|
621 { SIGTALRM, "SIGTALRM" }, |
|
622 #endif |
|
623 { SIGTERM, "SIGTERM" }, |
|
624 #ifdef SIGTHAW |
|
625 { SIGTHAW, "SIGTHAW" }, |
|
626 #endif |
|
627 { SIGTRAP, "SIGTRAP" }, |
|
628 #ifdef SIGTSTP |
|
629 { SIGTSTP, "SIGTSTP" }, |
|
630 #endif |
|
631 { SIGTTIN, "SIGTTIN" }, |
|
632 { SIGTTOU, "SIGTTOU" }, |
|
633 #ifdef SIGURG |
|
634 { SIGURG, "SIGURG" }, |
|
635 #endif |
|
636 { SIGUSR1, "SIGUSR1" }, |
|
637 { SIGUSR2, "SIGUSR2" }, |
|
638 #ifdef SIGVIRT |
|
639 { SIGVIRT, "SIGVIRT" }, |
|
640 #endif |
|
641 { SIGVTALRM, "SIGVTALRM" }, |
|
642 #ifdef SIGWAITING |
|
643 { SIGWAITING, "SIGWAITING" }, |
|
644 #endif |
|
645 #ifdef SIGWINCH |
|
646 { SIGWINCH, "SIGWINCH" }, |
|
647 #endif |
|
648 #ifdef SIGWINDOW |
|
649 { SIGWINDOW, "SIGWINDOW" }, |
|
650 #endif |
|
651 { SIGXCPU, "SIGXCPU" }, |
|
652 { SIGXFSZ, "SIGXFSZ" }, |
|
653 #ifdef SIGXRES |
|
654 { SIGXRES, "SIGXRES" }, |
|
655 #endif |
|
656 { -1, NULL } |
|
657 }; |
|
658 |
496 // Returned string is a constant. For unknown signals "UNKNOWN" is returned. |
659 // Returned string is a constant. For unknown signals "UNKNOWN" is returned. |
497 const char* os::Posix::get_signal_name(int sig, char* out, size_t outlen) { |
660 const char* os::Posix::get_signal_name(int sig, char* out, size_t outlen) { |
498 |
|
499 static const struct { |
|
500 int sig; const char* name; |
|
501 } |
|
502 info[] = |
|
503 { |
|
504 { SIGABRT, "SIGABRT" }, |
|
505 #ifdef SIGAIO |
|
506 { SIGAIO, "SIGAIO" }, |
|
507 #endif |
|
508 { SIGALRM, "SIGALRM" }, |
|
509 #ifdef SIGALRM1 |
|
510 { SIGALRM1, "SIGALRM1" }, |
|
511 #endif |
|
512 { SIGBUS, "SIGBUS" }, |
|
513 #ifdef SIGCANCEL |
|
514 { SIGCANCEL, "SIGCANCEL" }, |
|
515 #endif |
|
516 { SIGCHLD, "SIGCHLD" }, |
|
517 #ifdef SIGCLD |
|
518 { SIGCLD, "SIGCLD" }, |
|
519 #endif |
|
520 { SIGCONT, "SIGCONT" }, |
|
521 #ifdef SIGCPUFAIL |
|
522 { SIGCPUFAIL, "SIGCPUFAIL" }, |
|
523 #endif |
|
524 #ifdef SIGDANGER |
|
525 { SIGDANGER, "SIGDANGER" }, |
|
526 #endif |
|
527 #ifdef SIGDIL |
|
528 { SIGDIL, "SIGDIL" }, |
|
529 #endif |
|
530 #ifdef SIGEMT |
|
531 { SIGEMT, "SIGEMT" }, |
|
532 #endif |
|
533 { SIGFPE, "SIGFPE" }, |
|
534 #ifdef SIGFREEZE |
|
535 { SIGFREEZE, "SIGFREEZE" }, |
|
536 #endif |
|
537 #ifdef SIGGFAULT |
|
538 { SIGGFAULT, "SIGGFAULT" }, |
|
539 #endif |
|
540 #ifdef SIGGRANT |
|
541 { SIGGRANT, "SIGGRANT" }, |
|
542 #endif |
|
543 { SIGHUP, "SIGHUP" }, |
|
544 { SIGILL, "SIGILL" }, |
|
545 { SIGINT, "SIGINT" }, |
|
546 #ifdef SIGIO |
|
547 { SIGIO, "SIGIO" }, |
|
548 #endif |
|
549 #ifdef SIGIOINT |
|
550 { SIGIOINT, "SIGIOINT" }, |
|
551 #endif |
|
552 #ifdef SIGIOT |
|
553 // SIGIOT is there for BSD compatibility, but on most Unices just a |
|
554 // synonym for SIGABRT. The result should be "SIGABRT", not |
|
555 // "SIGIOT". |
|
556 #if (SIGIOT != SIGABRT ) |
|
557 { SIGIOT, "SIGIOT" }, |
|
558 #endif |
|
559 #endif |
|
560 #ifdef SIGKAP |
|
561 { SIGKAP, "SIGKAP" }, |
|
562 #endif |
|
563 { SIGKILL, "SIGKILL" }, |
|
564 #ifdef SIGLOST |
|
565 { SIGLOST, "SIGLOST" }, |
|
566 #endif |
|
567 #ifdef SIGLWP |
|
568 { SIGLWP, "SIGLWP" }, |
|
569 #endif |
|
570 #ifdef SIGLWPTIMER |
|
571 { SIGLWPTIMER, "SIGLWPTIMER" }, |
|
572 #endif |
|
573 #ifdef SIGMIGRATE |
|
574 { SIGMIGRATE, "SIGMIGRATE" }, |
|
575 #endif |
|
576 #ifdef SIGMSG |
|
577 { SIGMSG, "SIGMSG" }, |
|
578 #endif |
|
579 { SIGPIPE, "SIGPIPE" }, |
|
580 #ifdef SIGPOLL |
|
581 { SIGPOLL, "SIGPOLL" }, |
|
582 #endif |
|
583 #ifdef SIGPRE |
|
584 { SIGPRE, "SIGPRE" }, |
|
585 #endif |
|
586 { SIGPROF, "SIGPROF" }, |
|
587 #ifdef SIGPTY |
|
588 { SIGPTY, "SIGPTY" }, |
|
589 #endif |
|
590 #ifdef SIGPWR |
|
591 { SIGPWR, "SIGPWR" }, |
|
592 #endif |
|
593 { SIGQUIT, "SIGQUIT" }, |
|
594 #ifdef SIGRECONFIG |
|
595 { SIGRECONFIG, "SIGRECONFIG" }, |
|
596 #endif |
|
597 #ifdef SIGRECOVERY |
|
598 { SIGRECOVERY, "SIGRECOVERY" }, |
|
599 #endif |
|
600 #ifdef SIGRESERVE |
|
601 { SIGRESERVE, "SIGRESERVE" }, |
|
602 #endif |
|
603 #ifdef SIGRETRACT |
|
604 { SIGRETRACT, "SIGRETRACT" }, |
|
605 #endif |
|
606 #ifdef SIGSAK |
|
607 { SIGSAK, "SIGSAK" }, |
|
608 #endif |
|
609 { SIGSEGV, "SIGSEGV" }, |
|
610 #ifdef SIGSOUND |
|
611 { SIGSOUND, "SIGSOUND" }, |
|
612 #endif |
|
613 { SIGSTOP, "SIGSTOP" }, |
|
614 { SIGSYS, "SIGSYS" }, |
|
615 #ifdef SIGSYSERROR |
|
616 { SIGSYSERROR, "SIGSYSERROR" }, |
|
617 #endif |
|
618 #ifdef SIGTALRM |
|
619 { SIGTALRM, "SIGTALRM" }, |
|
620 #endif |
|
621 { SIGTERM, "SIGTERM" }, |
|
622 #ifdef SIGTHAW |
|
623 { SIGTHAW, "SIGTHAW" }, |
|
624 #endif |
|
625 { SIGTRAP, "SIGTRAP" }, |
|
626 #ifdef SIGTSTP |
|
627 { SIGTSTP, "SIGTSTP" }, |
|
628 #endif |
|
629 { SIGTTIN, "SIGTTIN" }, |
|
630 { SIGTTOU, "SIGTTOU" }, |
|
631 #ifdef SIGURG |
|
632 { SIGURG, "SIGURG" }, |
|
633 #endif |
|
634 { SIGUSR1, "SIGUSR1" }, |
|
635 { SIGUSR2, "SIGUSR2" }, |
|
636 #ifdef SIGVIRT |
|
637 { SIGVIRT, "SIGVIRT" }, |
|
638 #endif |
|
639 { SIGVTALRM, "SIGVTALRM" }, |
|
640 #ifdef SIGWAITING |
|
641 { SIGWAITING, "SIGWAITING" }, |
|
642 #endif |
|
643 #ifdef SIGWINCH |
|
644 { SIGWINCH, "SIGWINCH" }, |
|
645 #endif |
|
646 #ifdef SIGWINDOW |
|
647 { SIGWINDOW, "SIGWINDOW" }, |
|
648 #endif |
|
649 { SIGXCPU, "SIGXCPU" }, |
|
650 { SIGXFSZ, "SIGXFSZ" }, |
|
651 #ifdef SIGXRES |
|
652 { SIGXRES, "SIGXRES" }, |
|
653 #endif |
|
654 { -1, NULL } |
|
655 }; |
|
656 |
661 |
657 const char* ret = NULL; |
662 const char* ret = NULL; |
658 |
663 |
659 #ifdef SIGRTMIN |
664 #ifdef SIGRTMIN |
660 if (sig >= SIGRTMIN && sig <= SIGRTMAX) { |
665 if (sig >= SIGRTMIN && sig <= SIGRTMAX) { |