Lines 285-291
Link Here
|
285 |
sigaddset(&act.sa_mask, sig); |
285 |
sigaddset(&act.sa_mask, sig); |
286 |
act.sa_flags = 0; |
286 |
act.sa_flags = 0; |
287 |
act.sa_handler = handler; |
287 |
act.sa_handler = handler; |
288 |
sigaction(sig, &act, &oact); |
288 |
if (sigaction(sig, &act, &oact)) |
|
|
289 |
perror("sigaction"); |
289 |
return oact.sa_handler; |
290 |
return oact.sa_handler; |
290 |
#endif |
291 |
#endif |
291 |
} |
292 |
} |
Lines 1684-1689
Link Here
|
1684 |
|
1685 |
|
1685 |
#ifdef SIGCHLD |
1686 |
#ifdef SIGCHLD |
1686 |
csig = signal(SIGCHLD, SIG_DFL); |
1687 |
csig = signal(SIGCHLD, SIG_DFL); |
|
|
1688 |
if (csig == SIG_ERR) { |
1689 |
perror("signal"); |
1690 |
return -1; |
1691 |
} |
1687 |
#endif |
1692 |
#endif |
1688 |
|
1693 |
|
1689 |
#ifdef DEBUG |
1694 |
#ifdef DEBUG |
Lines 1708-1714
Link Here
|
1708 |
} |
1713 |
} |
1709 |
|
1714 |
|
1710 |
#ifdef SIGCHLD |
1715 |
#ifdef SIGCHLD |
1711 |
signal(SIGCHLD, csig); |
1716 |
if (signal(SIGCHLD, csig) == SIG_ERR) { |
|
|
1717 |
perror("signal"); |
1718 |
return -1; |
1719 |
} |
1712 |
#endif |
1720 |
#endif |
1713 |
|
1721 |
|
1714 |
return p == -1 ? -1 : status; |
1722 |
return p == -1 ? -1 : status; |
Lines 1720-1726
Link Here
|
1720 |
int pid; |
1728 |
int pid; |
1721 |
} *pidlist; |
1729 |
} *pidlist; |
1722 |
|
1730 |
|
1723 |
static sighandler_t old_alarm = NULL; /* XXX horrible awful hack */ |
1731 |
void (*old_alarm)(int) = NULL; /* XXX horrible awful hack */ |
1724 |
|
1732 |
|
1725 |
pointer |
1733 |
pointer |
1726 |
Popen(char *command, char *type) |
1734 |
Popen(char *command, char *type) |
Lines 1745-1757
Link Here
|
1745 |
|
1753 |
|
1746 |
/* Ignore the smart scheduler while this is going on */ |
1754 |
/* Ignore the smart scheduler while this is going on */ |
1747 |
old_alarm = signal(SIGALRM, SIG_IGN); |
1755 |
old_alarm = signal(SIGALRM, SIG_IGN); |
|
|
1756 |
if (old_alarm == SIG_ERR) { |
1757 |
perror("signal"); |
1758 |
return NULL; |
1759 |
} |
1748 |
|
1760 |
|
1749 |
switch (pid = fork()) { |
1761 |
switch (pid = fork()) { |
1750 |
case -1: /* error */ |
1762 |
case -1: /* error */ |
1751 |
close(pdes[0]); |
1763 |
close(pdes[0]); |
1752 |
close(pdes[1]); |
1764 |
close(pdes[1]); |
1753 |
xfree(cur); |
1765 |
xfree(cur); |
1754 |
signal(SIGALRM, old_alarm); |
1766 |
if (signal(SIGALRM, old_alarm) == SIG_ERR) |
|
|
1767 |
perror("signal"); |
1755 |
return NULL; |
1768 |
return NULL; |
1756 |
case 0: /* child */ |
1769 |
case 0: /* child */ |
1757 |
if (setgid(getgid()) == -1) |
1770 |
if (setgid(getgid()) == -1) |
Lines 1927-1933
Link Here
|
1927 |
/* allow EINTR again */ |
1940 |
/* allow EINTR again */ |
1928 |
OsReleaseSignals (); |
1941 |
OsReleaseSignals (); |
1929 |
|
1942 |
|
1930 |
signal(SIGALRM, old_alarm); |
1943 |
if (old_alarm && signal(SIGALRM, old_alarm) == SIG_ERR) { |
|
|
1944 |
perror("signal"); |
1945 |
return -1; |
1946 |
} |
1931 |
|
1947 |
|
1932 |
return pid == -1 ? -1 : pstat; |
1948 |
return pid == -1 ? -1 : pstat; |
1933 |
} |
1949 |
} |