… | |
… | |
77 | # ifndef EV_USE_REALTIME |
77 | # ifndef EV_USE_REALTIME |
78 | # define EV_USE_REALTIME 0 |
78 | # define EV_USE_REALTIME 0 |
79 | # endif |
79 | # endif |
80 | # endif |
80 | # endif |
81 | |
81 | |
|
|
82 | # if HAVE_NANOSLEEP |
82 | # ifndef EV_USE_NANOSLEEP |
83 | # ifndef EV_USE_NANOSLEEP |
83 | # if HAVE_NANOSLEEP |
|
|
84 | # define EV_USE_NANOSLEEP EV_FEATURE_OS |
84 | # define EV_USE_NANOSLEEP EV_FEATURE_OS |
|
|
85 | # endif |
85 | # else |
86 | # else |
|
|
87 | # undef EV_USE_NANOSLEEP |
86 | # define EV_USE_NANOSLEEP 0 |
88 | # define EV_USE_NANOSLEEP 0 |
|
|
89 | # endif |
|
|
90 | |
|
|
91 | # if HAVE_SELECT && HAVE_SYS_SELECT_H |
|
|
92 | # ifndef EV_USE_SELECT |
|
|
93 | # define EV_USE_SELECT EV_FEATURE_BACKENDS |
87 | # endif |
94 | # endif |
|
|
95 | # else |
|
|
96 | # undef EV_USE_SELECT |
|
|
97 | # define EV_USE_SELECT 0 |
88 | # endif |
98 | # endif |
89 | |
99 | |
|
|
100 | # if HAVE_POLL && HAVE_POLL_H |
90 | # ifndef EV_USE_SELECT |
101 | # ifndef EV_USE_POLL |
91 | # if HAVE_SELECT && HAVE_SYS_SELECT_H |
|
|
92 | # define EV_USE_SELECT EV_FEATURE_BACKENDS |
102 | # define EV_USE_POLL EV_FEATURE_BACKENDS |
93 | # else |
|
|
94 | # define EV_USE_SELECT 0 |
|
|
95 | # endif |
103 | # endif |
96 | # endif |
|
|
97 | |
|
|
98 | # ifndef EV_USE_POLL |
|
|
99 | # if HAVE_POLL && HAVE_POLL_H |
|
|
100 | # define EV_USE_POLL EV_FEATURE_BACKENDS |
|
|
101 | # else |
104 | # else |
|
|
105 | # undef EV_USE_POLL |
102 | # define EV_USE_POLL 0 |
106 | # define EV_USE_POLL 0 |
103 | # endif |
|
|
104 | # endif |
107 | # endif |
105 | |
108 | |
106 | # ifndef EV_USE_EPOLL |
|
|
107 | # if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H |
109 | # if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H |
|
|
110 | # ifndef EV_USE_EPOLL |
108 | # define EV_USE_EPOLL EV_FEATURE_BACKENDS |
111 | # define EV_USE_EPOLL EV_FEATURE_BACKENDS |
109 | # else |
|
|
110 | # define EV_USE_EPOLL 0 |
|
|
111 | # endif |
112 | # endif |
|
|
113 | # else |
|
|
114 | # undef EV_USE_EPOLL |
|
|
115 | # define EV_USE_EPOLL 0 |
112 | # endif |
116 | # endif |
113 | |
117 | |
114 | # ifndef EV_USE_KQUEUE |
|
|
115 | # if HAVE_KQUEUE && HAVE_SYS_EVENT_H |
118 | # if HAVE_KQUEUE && HAVE_SYS_EVENT_H |
|
|
119 | # ifndef EV_USE_KQUEUE |
116 | # define EV_USE_KQUEUE EV_FEATURE_BACKENDS |
120 | # define EV_USE_KQUEUE EV_FEATURE_BACKENDS |
117 | # else |
|
|
118 | # define EV_USE_KQUEUE 0 |
|
|
119 | # endif |
121 | # endif |
|
|
122 | # else |
|
|
123 | # undef EV_USE_KQUEUE |
|
|
124 | # define EV_USE_KQUEUE 0 |
120 | # endif |
125 | # endif |
121 | |
126 | |
122 | # ifndef EV_USE_PORT |
|
|
123 | # if HAVE_PORT_H && HAVE_PORT_CREATE |
127 | # if HAVE_PORT_H && HAVE_PORT_CREATE |
|
|
128 | # ifndef EV_USE_PORT |
124 | # define EV_USE_PORT EV_FEATURE_BACKENDS |
129 | # define EV_USE_PORT EV_FEATURE_BACKENDS |
125 | # else |
|
|
126 | # define EV_USE_PORT 0 |
|
|
127 | # endif |
130 | # endif |
|
|
131 | # else |
|
|
132 | # undef EV_USE_PORT |
|
|
133 | # define EV_USE_PORT 0 |
128 | # endif |
134 | # endif |
129 | |
135 | |
130 | # ifndef EV_USE_INOTIFY |
|
|
131 | # if HAVE_INOTIFY_INIT && HAVE_SYS_INOTIFY_H |
136 | # if HAVE_INOTIFY_INIT && HAVE_SYS_INOTIFY_H |
|
|
137 | # ifndef EV_USE_INOTIFY |
132 | # define EV_USE_INOTIFY EV_FEATURE_OS |
138 | # define EV_USE_INOTIFY EV_FEATURE_OS |
133 | # else |
|
|
134 | # define EV_USE_INOTIFY 0 |
|
|
135 | # endif |
139 | # endif |
|
|
140 | # else |
|
|
141 | # undef EV_USE_INOTIFY |
|
|
142 | # define EV_USE_INOTIFY 0 |
136 | # endif |
143 | # endif |
137 | |
144 | |
138 | # ifndef EV_USE_SIGNALFD |
|
|
139 | # if HAVE_SIGNALFD && HAVE_SYS_SIGNALFD_H |
145 | # if HAVE_SIGNALFD && HAVE_SYS_SIGNALFD_H |
|
|
146 | # ifndef EV_USE_SIGNALFD |
140 | # define EV_USE_SIGNALFD EV_FEATURE_OS |
147 | # define EV_USE_SIGNALFD EV_FEATURE_OS |
141 | # else |
|
|
142 | # define EV_USE_SIGNALFD 0 |
|
|
143 | # endif |
148 | # endif |
|
|
149 | # else |
|
|
150 | # undef EV_USE_SIGNALFD |
|
|
151 | # define EV_USE_SIGNALFD 0 |
144 | # endif |
152 | # endif |
145 | |
153 | |
|
|
154 | # if HAVE_EVENTFD |
146 | # ifndef EV_USE_EVENTFD |
155 | # ifndef EV_USE_EVENTFD |
147 | # if HAVE_EVENTFD |
|
|
148 | # define EV_USE_EVENTFD EV_FEATURE_OS |
156 | # define EV_USE_EVENTFD EV_FEATURE_OS |
149 | # else |
|
|
150 | # define EV_USE_EVENTFD 0 |
|
|
151 | # endif |
157 | # endif |
|
|
158 | # else |
|
|
159 | # undef EV_USE_EVENTFD |
|
|
160 | # define EV_USE_EVENTFD 0 |
152 | # endif |
161 | # endif |
153 | |
162 | |
154 | #endif |
163 | #endif |
155 | |
164 | |
156 | #include <math.h> |
165 | #include <math.h> |
… | |
… | |
186 | # ifndef EV_SELECT_IS_WINSOCKET |
195 | # ifndef EV_SELECT_IS_WINSOCKET |
187 | # define EV_SELECT_IS_WINSOCKET 1 |
196 | # define EV_SELECT_IS_WINSOCKET 1 |
188 | # endif |
197 | # endif |
189 | # undef EV_AVOID_STDIO |
198 | # undef EV_AVOID_STDIO |
190 | #endif |
199 | #endif |
|
|
200 | |
|
|
201 | /* OS X, in its infinite idiocy, actually HARDCODES |
|
|
202 | * a limit of 1024 into their select. Where people have brains, |
|
|
203 | * OS X engineers apparently have a vacuum. Or maybe they were |
|
|
204 | * ordered to have a vacuum, or they do anything for money. |
|
|
205 | * This might help. Or not. |
|
|
206 | */ |
|
|
207 | #define _DARWIN_UNLIMITED_SELECT 1 |
191 | |
208 | |
192 | /* this block tries to deduce configuration from header-defined symbols and defaults */ |
209 | /* this block tries to deduce configuration from header-defined symbols and defaults */ |
193 | |
210 | |
194 | /* try to deduce the maximum number of signals on this platform */ |
211 | /* try to deduce the maximum number of signals on this platform */ |
195 | #if defined (EV_NSIG) |
212 | #if defined (EV_NSIG) |
… | |
… | |
494 | #define ev_active(w) ((W)(w))->active |
511 | #define ev_active(w) ((W)(w))->active |
495 | #define ev_at(w) ((WT)(w))->at |
512 | #define ev_at(w) ((WT)(w))->at |
496 | |
513 | |
497 | #if EV_USE_REALTIME |
514 | #if EV_USE_REALTIME |
498 | /* sig_atomic_t is used to avoid per-thread variables or locking but still */ |
515 | /* sig_atomic_t is used to avoid per-thread variables or locking but still */ |
499 | /* giving it a reasonably high chance of working on typical architetcures */ |
516 | /* giving it a reasonably high chance of working on typical architectures */ |
500 | static EV_ATOMIC_T have_realtime; /* did clock_gettime (CLOCK_REALTIME) work? */ |
517 | static EV_ATOMIC_T have_realtime; /* did clock_gettime (CLOCK_REALTIME) work? */ |
501 | #endif |
518 | #endif |
502 | |
519 | |
503 | #if EV_USE_MONOTONIC |
520 | #if EV_USE_MONOTONIC |
504 | static EV_ATOMIC_T have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */ |
521 | static EV_ATOMIC_T have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */ |
… | |
… | |
777 | /*****************************************************************************/ |
794 | /*****************************************************************************/ |
778 | |
795 | |
779 | #define MALLOC_ROUND 4096 /* prefer to allocate in chunks of this size, must be 2**n and >> 4 longs */ |
796 | #define MALLOC_ROUND 4096 /* prefer to allocate in chunks of this size, must be 2**n and >> 4 longs */ |
780 | |
797 | |
781 | /* find a suitable new size for the given array, */ |
798 | /* find a suitable new size for the given array, */ |
782 | /* hopefully by rounding to a ncie-to-malloc size */ |
799 | /* hopefully by rounding to a nice-to-malloc size */ |
783 | inline_size int |
800 | inline_size int |
784 | array_nextsize (int elem, int cur, int cnt) |
801 | array_nextsize (int elem, int cur, int cnt) |
785 | { |
802 | { |
786 | int ncur = cur + 1; |
803 | int ncur = cur + 1; |
787 | |
804 | |
… | |
… | |
1054 | } |
1071 | } |
1055 | |
1072 | |
1056 | /*****************************************************************************/ |
1073 | /*****************************************************************************/ |
1057 | |
1074 | |
1058 | /* |
1075 | /* |
1059 | * the heap functions want a real array index. array index 0 uis guaranteed to not |
1076 | * the heap functions want a real array index. array index 0 is guaranteed to not |
1060 | * be in-use at any time. the first heap entry is at array [HEAP0]. DHEAP gives |
1077 | * be in-use at any time. the first heap entry is at array [HEAP0]. DHEAP gives |
1061 | * the branching factor of the d-tree. |
1078 | * the branching factor of the d-tree. |
1062 | */ |
1079 | */ |
1063 | |
1080 | |
1064 | /* |
1081 | /* |
… | |
… | |
2162 | feed_reverse_done (EV_A_ EV_PERIODIC); |
2179 | feed_reverse_done (EV_A_ EV_PERIODIC); |
2163 | } |
2180 | } |
2164 | } |
2181 | } |
2165 | |
2182 | |
2166 | /* simply recalculate all periodics */ |
2183 | /* simply recalculate all periodics */ |
2167 | /* TODO: maybe ensure that at leats one event happens when jumping forward? */ |
2184 | /* TODO: maybe ensure that at least one event happens when jumping forward? */ |
2168 | static void noinline |
2185 | static void noinline |
2169 | periodics_reschedule (EV_P) |
2186 | periodics_reschedule (EV_P) |
2170 | { |
2187 | { |
2171 | int i; |
2188 | int i; |
2172 | |
2189 | |