1 /* 2 * loop member variable declarations 3 * 4 * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <libev@schmorp.de> 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without modifica- 8 * tion, are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- 19 * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 20 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- 21 * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- 25 * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 26 * OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Alternatively, the contents of this file may be used under the terms of 29 * the GNU General Public License ("GPL") version 2 or any later version, 30 * in which case the provisions of the GPL are applicable instead of 31 * the above. If you wish to allow the use of your version of this file 32 * only under the terms of the GPL and not to allow others to use your 33 * version of this file under the BSD license, indicate your decision 34 * by deleting the provisions above and replace them with the notice 35 * and other provisions required by the GPL. If you do not delete the 36 * provisions above, a recipient may use your version of this file under 37 * either the BSD or the GPL. 38 */ 39 40 #define VARx(type,name) VAR(name, type name) 41 42 VARx(ev_tstamp, now_floor) /* last time we refreshed rt_time */ 43 VARx(ev_tstamp, mn_now) /* monotonic clock "now" */ 44 VARx(ev_tstamp, rtmn_diff) /* difference realtime - monotonic time */ 45 46 /* for reverse feeding of events */ 47 VARx(W *, rfeeds) 48 VARx(int, rfeedmax) 49 VARx(int, rfeedcnt) 50 51 VAR (pendings, ANPENDING *pendings [NUMPRI]) 52 VAR (pendingmax, int pendingmax [NUMPRI]) 53 VAR (pendingcnt, int pendingcnt [NUMPRI]) 54 VARx(int, pendingpri) /* highest priority currently pending */ 55 VARx(ev_prepare, pending_w) /* dummy pending watcher */ 56 57 VARx(ev_tstamp, io_blocktime) 58 VARx(ev_tstamp, timeout_blocktime) 59 60 VARx(int, backend) 61 VARx(int, activecnt) /* total number of active events ("refcount") */ 62 VARx(EV_ATOMIC_T, loop_done) /* signal by ev_break */ 63 64 VARx(int, backend_fd) 65 VARx(ev_tstamp, backend_mintime) /* assumed typical timer resolution */ 66 VAR (backend_modify, void (*backend_modify)(EV_P_ int fd, int oev, int nev)) 67 VAR (backend_poll , void (*backend_poll)(EV_P_ ev_tstamp timeout)) 68 69 VARx(ANFD *, anfds) 70 VARx(int, anfdmax) 71 72 VAR (evpipe, int evpipe [2]) 73 VARx(ev_io, pipe_w) 74 VARx(EV_ATOMIC_T, pipe_write_wanted) 75 VARx(EV_ATOMIC_T, pipe_write_skipped) 76 77 #if !defined(_WIN32) || EV_GENWRAP 78 VARx(pid_t, curpid) 79 #endif 80 81 VARx(char, postfork) /* true if we need to recreate kernel state after fork */ 82 83 #if EV_USE_SELECT || EV_GENWRAP 84 VARx(void *, vec_ri) 85 VARx(void *, vec_ro) 86 VARx(void *, vec_wi) 87 VARx(void *, vec_wo) 88 #if defined(_WIN32) || EV_GENWRAP 89 VARx(void *, vec_eo) 90 #endif 91 VARx(int, vec_max) 92 #endif 93 94 #if EV_USE_POLL || EV_GENWRAP 95 VARx(struct pollfd *, polls) 96 VARx(int, pollmax) 97 VARx(int, pollcnt) 98 VARx(int *, pollidxs) /* maps fds into structure indices */ 99 VARx(int, pollidxmax) 100 #endif 101 102 #if EV_USE_EPOLL || EV_GENWRAP 103 VARx(struct epoll_event *, epoll_events) 104 VARx(int, epoll_eventmax) 105 VARx(int *, epoll_eperms) 106 VARx(int, epoll_epermcnt) 107 VARx(int, epoll_epermmax) 108 #endif 109 110 #if EV_USE_KQUEUE || EV_GENWRAP 111 VARx(pid_t, kqueue_fd_pid) 112 VARx(struct kevent *, kqueue_changes) 113 VARx(int, kqueue_changemax) 114 VARx(int, kqueue_changecnt) 115 VARx(struct kevent *, kqueue_events) 116 VARx(int, kqueue_eventmax) 117 #endif 118 119 #if EV_USE_PORT || EV_GENWRAP 120 VARx(struct port_event *, port_events) 121 VARx(int, port_eventmax) 122 #endif 123 124 #if EV_USE_IOCP || EV_GENWRAP 125 VARx(HANDLE, iocp) 126 #endif 127 128 VARx(int *, fdchanges) 129 VARx(int, fdchangemax) 130 VARx(int, fdchangecnt) 131 132 VARx(ANHE *, timers) 133 VARx(int, timermax) 134 VARx(int, timercnt) 135 136 #if EV_PERIODIC_ENABLE || EV_GENWRAP 137 VARx(ANHE *, periodics) 138 VARx(int, periodicmax) 139 VARx(int, periodiccnt) 140 #endif 141 142 #if EV_IDLE_ENABLE || EV_GENWRAP 143 VAR (idles, ev_idle **idles [NUMPRI]) 144 VAR (idlemax, int idlemax [NUMPRI]) 145 VAR (idlecnt, int idlecnt [NUMPRI]) 146 #endif 147 VARx(int, idleall) /* total number */ 148 149 VARx(struct ev_prepare **, prepares) 150 VARx(int, preparemax) 151 VARx(int, preparecnt) 152 153 VARx(struct ev_check **, checks) 154 VARx(int, checkmax) 155 VARx(int, checkcnt) 156 157 #if EV_FORK_ENABLE || EV_GENWRAP 158 VARx(struct ev_fork **, forks) 159 VARx(int, forkmax) 160 VARx(int, forkcnt) 161 #endif 162 163 #if EV_CLEANUP_ENABLE || EV_GENWRAP 164 VARx(struct ev_cleanup **, cleanups) 165 VARx(int, cleanupmax) 166 VARx(int, cleanupcnt) 167 #endif 168 169 #if EV_ASYNC_ENABLE || EV_GENWRAP 170 VARx(EV_ATOMIC_T, async_pending) 171 VARx(struct ev_async **, asyncs) 172 VARx(int, asyncmax) 173 VARx(int, asynccnt) 174 #endif 175 176 #if EV_USE_INOTIFY || EV_GENWRAP 177 VARx(int, fs_fd) 178 VARx(ev_io, fs_w) 179 VARx(char, fs_2625) /* whether we are running in linux 2.6.25 or newer */ 180 VAR (fs_hash, ANFS fs_hash [EV_INOTIFY_HASHSIZE]) 181 #endif 182 183 VARx(EV_ATOMIC_T, sig_pending) 184 #if EV_USE_SIGNALFD || EV_GENWRAP 185 VARx(int, sigfd) 186 VARx(ev_io, sigfd_w) 187 VARx(sigset_t, sigfd_set) 188 #endif 189 190 VARx(unsigned int, origflags) /* original loop flags */ 191 192 #if EV_FEATURE_API || EV_GENWRAP 193 VARx(unsigned int, loop_count) /* total number of loop iterations/blocks */ 194 VARx(unsigned int, loop_depth) /* #ev_run enters - #ev_run leaves */ 195 196 VARx(void *, userdata) 197 /* C++ doesn't support the ev_loop_callback typedef here. stinks. */ 198 VAR (release_cb, void (*release_cb)(EV_P) EV_THROW) 199 VAR (acquire_cb, void (*acquire_cb)(EV_P) EV_THROW) 200 VAR (invoke_cb , ev_loop_callback invoke_cb) 201 #endif 202 203 #undef VARx 204 205