annotate auto/os/darwin @ 4072:cf334deeea66

Bugfix: read event was not blocked after reading body. Read event should be blocked after reading body, else undefined behaviour might occur on additional client activity. This fixes segmentation faults observed with proxy_ignore_client_abort set.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 05 Sep 2011 12:43:31 +0000
parents 345a014436d4
children d620f497c50f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2128
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 # Copyright (C) Igor Sysoev
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 have=NGX_DARWIN . auto/have_headers
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 CORE_INCS="$UNIX_INCS"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 CORE_DEPS="$UNIX_DEPS $DARWIN_DEPS"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 CORE_SRCS="$UNIX_SRCS $DARWIN_SRCS"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 ngx_spacer='
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 '
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 # kqueue
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 echo " + kqueue found"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 have=NGX_HAVE_KQUEUE . auto/have
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 have=NGX_HAVE_CLEAR_EVENT . auto/have
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 EVENT_FOUND=YES
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 NGX_KQUEUE_CHECKED=YES
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 ngx_feature="kqueue's EVFILT_TIMER"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 ngx_feature_name="NGX_HAVE_TIMER_EVENT"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 ngx_feature_run=yes
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 ngx_feature_incs="#include <sys/event.h>
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 #include <sys/time.h>"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 ngx_feature_path=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 ngx_feature_libs=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 ngx_feature_test="int kq;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 struct kevent kev;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 struct timespec ts;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 if ((kq = kqueue()) == -1) return 1;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 kev.ident = 0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 kev.filter = EVFILT_TIMER;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 kev.flags = EV_ADD|EV_ENABLE;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 kev.fflags = 0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 kev.data = 1000;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 kev.udata = 0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 ts.tv_sec = 0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 ts.tv_nsec = 0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 if (kev.flags & EV_ERROR) return 1;"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 . auto/feature
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 ngx_feature="Darwin 64-bit kqueue millisecond timeout bug"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 ngx_feature_name=NGX_DARWIN_KEVENT_BUG
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 ngx_feature_run=bug
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 ngx_feature_incs="#include <sys/event.h>
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 #include <sys/time.h>"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 ngx_feature_path=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 ngx_feature_libs=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 ngx_feature_test="int kq;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 struct kevent kev;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 struct timespec ts;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 struct timeval tv, tv0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 kq = kqueue();
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 ts.tv_sec = 0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 ts.tv_nsec = 999000000;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 gettimeofday(&tv, 0);
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 kevent(kq, NULL, 0, &kev, 1, &ts);
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 gettimeofday(&tv0, 0);
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 timersub(&tv0, &tv, &tv);
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 . auto/feature
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 # sendfile()
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 CC_AUX_FLAGS="$CC_AUX_FLAGS"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 ngx_feature="sendfile()"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 ngx_feature_name="NGX_HAVE_SENDFILE"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 ngx_feature_run=yes
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 ngx_feature_incs="#include <sys/types.h>
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 #include <sys/socket.h>
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 #include <sys/uio.h>
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 #include <sys/errno.h>"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 ngx_feature_path=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ngx_feature_libs=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 ngx_feature_test="int s = 0, fd = 1;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 off_t n; off_t off = 0;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 n = sendfile(s, fd, off, &n, NULL, 0);
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 if (n == -1 && errno == ENOSYS) return 1"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 . auto/feature
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 if [ $ngx_found = yes ]; then
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 have=NGX_HAVE_SENDFILE . auto/have
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 CORE_SRCS="$CORE_SRCS $DARWIN_SENDFILE_SRCS"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 fi
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 ngx_feature="atomic(3)"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 ngx_feature_name=NGX_DARWIN_ATOMIC
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 ngx_feature_run=no
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 ngx_feature_incs="#include <libkern/OSAtomic.h>"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 ngx_feature_path=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 ngx_feature_libs=
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 ngx_feature_test="int32_t lock, n;
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 n = OSAtomicCompareAndSwap32Barrier(0, 1, lock)"
345a014436d4 *) move Darwin support to separate files
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 . auto/feature