diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 8adfcb347..e696ac751 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -2500,6 +2500,43 @@ static void sighandler(int sig) { _exit(1); } | |||
2500 | ) | 2500 | ) |
2501 | fi | 2501 | fi |
2502 | 2502 | ||
2503 | AC_MSG_CHECKING([if SA_RESTARTed signals interrupt select()]) | ||
2504 | AC_RUN_IFELSE( | ||
2505 | [AC_LANG_PROGRAM([[ | ||
2506 | #ifdef HAVE_SYS_SELECT | ||
2507 | # include <sys/select.h> | ||
2508 | #endif | ||
2509 | #include <sys/types.h> | ||
2510 | #include <sys/time.h> | ||
2511 | #include <stdlib.h> | ||
2512 | #include <signal.h> | ||
2513 | static void sighandler(int sig) { } | ||
2514 | ]], [[ | ||
2515 | int r; | ||
2516 | pid_t pid; | ||
2517 | struct sigaction sa; | ||
2518 | |||
2519 | sa.sa_handler = sighandler; | ||
2520 | sa.sa_flags = SA_RESTART; | ||
2521 | (void)sigaction(SIGTERM, &sa, NULL); | ||
2522 | if ((pid = fork()) == 0) { /* child */ | ||
2523 | sleep(1); | ||
2524 | kill(getppid(), SIGTERM); | ||
2525 | sleep(1); | ||
2526 | kill(getppid(), SIGKILL); | ||
2527 | exit(0); | ||
2528 | } else { /* parent */ | ||
2529 | r = select(0, NULL, NULL, NULL, NULL); | ||
2530 | } | ||
2531 | exit(r == -1 ? 0 : 1); | ||
2532 | ]])], | ||
2533 | [AC_MSG_RESULT([yes])], | ||
2534 | [AC_MSG_RESULT([no]) | ||
2535 | AC_DEFINE([NO_SA_RESTART], [1], | ||
2536 | [SA_RESTARTed signals do no interrupt select])], | ||
2537 | [AC_MSG_WARN([cross compiling: assuming yes])] | ||
2538 | ) | ||
2539 | |||
2503 | AC_CHECK_FUNCS([getpgrp],[ | 2540 | AC_CHECK_FUNCS([getpgrp],[ |
2504 | AC_MSG_CHECKING([if getpgrp accepts zero args]) | 2541 | AC_MSG_CHECKING([if getpgrp accepts zero args]) |
2505 | AC_COMPILE_IFELSE( | 2542 | AC_COMPILE_IFELSE( |