diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-03-27 14:31:35 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-03-27 14:31:35 +0000 |
commit | f6156ab875f150f8f719c39b81544c3d379e72d5 (patch) | |
tree | 1877f537ff73f8f6a75b5d9862f17ab79d532ddb /package/uhttpd/src/uhttpd-utils.c | |
parent | e8476a2ff1cdd8ffca1b57f52bc0f6f43943bbaf (diff) | |
download | upstream-f6156ab875f150f8f719c39b81544c3d379e72d5.tar.gz upstream-f6156ab875f150f8f719c39b81544c3d379e72d5.tar.bz2 upstream-f6156ab875f150f8f719c39b81544c3d379e72d5.zip |
[package] uhttpd: block SIGCHLD until it is expected (#6957)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20513 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/uhttpd/src/uhttpd-utils.c')
-rw-r--r-- | package/uhttpd/src/uhttpd-utils.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/package/uhttpd/src/uhttpd-utils.c b/package/uhttpd/src/uhttpd-utils.c index c1e08b0695..55b2c410e3 100644 --- a/package/uhttpd/src/uhttpd-utils.c +++ b/package/uhttpd/src/uhttpd-utils.c @@ -88,6 +88,25 @@ char *strfind(char *haystack, int hslen, const char *needle, int ndlen) return NULL; } +/* interruptable select() */ +int select_intr(int n, fd_set *r, fd_set *w, fd_set *e, struct timeval *t) +{ + int rv; + sigset_t ssn, sso; + + /* unblock SIGCHLD */ + sigemptyset(&ssn); + sigaddset(&ssn, SIGCHLD); + sigprocmask(SIG_UNBLOCK, &ssn, &sso); + + rv = select(n, r, w, e, t); + + /* restore signal mask */ + sigprocmask(SIG_SETMASK, &sso, NULL); + + return rv; +} + int uh_tcp_send(struct client *cl, const char *buf, int len) { |