nio4r 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGES.md +5 -0
 - data/README.md +4 -4
 - data/ext/libev/Changes +29 -4
 - data/ext/libev/LICENSE +1 -1
 - data/ext/libev/README +1 -1
 - data/ext/libev/ev.c +126 -32
 - data/ext/libev/ev.h +6 -4
 - data/ext/libev/ev_epoll.c +4 -1
 - data/ext/libev/ev_kqueue.c +1 -1
 - data/ext/libev/ev_poll.c +1 -1
 - data/ext/libev/ev_vars.h +3 -2
 - data/ext/nio4r/monitor.c +5 -2
 - data/lib/nio/version.rb +1 -1
 - data/spec/nio/monitor_spec.rb +8 -0
 - metadata +4 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 96d59635d5568ac28d3463cd275c144d164b2237
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 05fec0902ed45c022b84a4ab5b7346b8d7f3e433
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1b90ca4d7cbcefe3bf6edc25670788f7c28bfd9839cb521f2a7517f0d6afa735e4abdcb9b417d1fdfb6cc530a01e6a8c63517652b4ba947a367669f13b5e3524
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a0d543b2c2afc1c404a82c1c7cffc5ce8a9ae37d3c0df0d002d7d975ae5fbe26e29a47e16b59694c77bab76be2fe1928a3999fafb814fe2c83667fd207f5aa42
         
     | 
    
        data/CHANGES.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -187,8 +187,8 @@ however this is not the case today. 
     | 
|
| 
       187 
187 
     | 
    
         
             
            License
         
     | 
| 
       188 
188 
     | 
    
         
             
            -------
         
     | 
| 
       189 
189 
     | 
    
         | 
| 
       190 
     | 
    
         
            -
            Copyright (c)  
     | 
| 
       191 
     | 
    
         
            -
            LICENSE.txt for further details.
         
     | 
| 
      
 190 
     | 
    
         
            +
            Copyright (c) 2011-2015 Tony Arcieri. Distributed under the MIT License.
         
     | 
| 
      
 191 
     | 
    
         
            +
            See LICENSE.txt for further details.
         
     | 
| 
       192 
192 
     | 
    
         | 
| 
       193 
     | 
    
         
            -
            Includes libev 4. 
     | 
| 
       194 
     | 
    
         
            -
            under the BSD license. See ext/libev/LICENSE for details.
         
     | 
| 
      
 193 
     | 
    
         
            +
            Includes libev 4.19. Copyright (c) 2009-2014 Marc Alexander Lehmann.
         
     | 
| 
      
 194 
     | 
    
         
            +
            Distributed under the BSD license. See ext/libev/LICENSE for details.
         
     | 
    
        data/ext/libev/Changes
    CHANGED
    
    | 
         @@ -11,7 +11,32 @@ TODO: store pid for each signal 
     | 
|
| 
       11 
11 
     | 
    
         
             
            TODO: document file descriptor usage per loop
         
     | 
| 
       12 
12 
     | 
    
         
             
            TODO: store loop pid_t and compare isndie signal handler,store 1 for same, 2 for differign pid, clean up in loop_fork
         
     | 
| 
       13 
13 
     | 
    
         
             
            TODO: embed watchers need updating when fd changes
         
     | 
| 
       14 
     | 
    
         
            -
            TODO: document  
     | 
| 
      
 14 
     | 
    
         
            +
            TODO: document portability requirements for atomic pointer access
         
     | 
| 
      
 15 
     | 
    
         
            +
            TODO: possible cb aliasing?
         
     | 
| 
      
 16 
     | 
    
         
            +
            TODO: document requirements for function pointers and calling conventions.
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            4.19 Thu Sep 25 08:18:25 CEST 2014
         
     | 
| 
      
 19 
     | 
    
         
            +
            	- ev.h wasn't valid C++ anymore, which tripped compilers other than
         
     | 
| 
      
 20 
     | 
    
         
            +
                      clang, msvc or gcc (analyzed by Raphael 'kena' Poss). Unfortunately,
         
     | 
| 
      
 21 
     | 
    
         
            +
                      C++ doesn't support typedefs for function pointers fully, so the affected
         
     | 
| 
      
 22 
     | 
    
         
            +
                      declarations have to spell out the types each time.
         
     | 
| 
      
 23 
     | 
    
         
            +
            	- when not using autoconf, tighten the check for clock_gettime and related
         
     | 
| 
      
 24 
     | 
    
         
            +
                      functionality.
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            4.18 Fri Sep  5 17:55:26 CEST 2014
         
     | 
| 
      
 27 
     | 
    
         
            +
            	- events on files were not always generated properly with the
         
     | 
| 
      
 28 
     | 
    
         
            +
                      epoll backend (testcase by Assaf Inbal).
         
     | 
| 
      
 29 
     | 
    
         
            +
            	- mark event pipe fd as cloexec after a fork (analyzed by Sami Farin).
         
     | 
| 
      
 30 
     | 
    
         
            +
                    - (ecb) support m68k, m88k and sh (patch by Miod Vallat).
         
     | 
| 
      
 31 
     | 
    
         
            +
                    - use a reasonable fallback for EV_NSIG instead of erroring out
         
     | 
| 
      
 32 
     | 
    
         
            +
                      when we can't detect the signal set size.
         
     | 
| 
      
 33 
     | 
    
         
            +
                    - in the absence of autoconf, do not use the clock syscall
         
     | 
| 
      
 34 
     | 
    
         
            +
                      on glibc >= 2.17 (avoids the syscall AND -lrt on systems
         
     | 
| 
      
 35 
     | 
    
         
            +
                      doing clock_gettime in userspace).
         
     | 
| 
      
 36 
     | 
    
         
            +
                    - ensure extern "C" function pointers are used for externally-visible
         
     | 
| 
      
 37 
     | 
    
         
            +
                      loop callbacks (not watcher callbacks yet).
         
     | 
| 
      
 38 
     | 
    
         
            +
                    - (ecb) work around memory barriers and volatile apparently both being
         
     | 
| 
      
 39 
     | 
    
         
            +
                      broken in visual studio 2008 and later (analysed and patch by Nicolas Noble).
         
     | 
| 
       15 
40 
     | 
    
         | 
| 
       16 
41 
     | 
    
         
             
            4.15 Fri Mar  1 12:04:50 CET 2013
         
     | 
| 
       17 
42 
     | 
    
         
             
                    - destroying a non-default loop would stop the global waitpid
         
     | 
| 
         @@ -41,7 +66,7 @@ TODO: document portbaility requirements for atomic pointer access 
     | 
|
| 
       41 
66 
     | 
    
         
             
                    - include sys/syscall.h instead of plain syscall.h.
         
     | 
| 
       42 
67 
     | 
    
         
             
                    - check for io watcher loops in ev_verify, check for the most
         
     | 
| 
       43 
68 
     | 
    
         
             
                      common reported usage bug in ev_io_start.
         
     | 
| 
       44 
     | 
    
         
            -
                    -  
     | 
| 
      
 69 
     | 
    
         
            +
                    - choose socket vs. WSASocket at compiletime using EV_USE_WSASOCKET.
         
     | 
| 
       45 
70 
     | 
    
         
             
                    - always use WSASend/WSARecv directly on windows, hoping that this
         
     | 
| 
       46 
71 
     | 
    
         
             
                      works in all cases (unlike read/write/send/recv...).
         
     | 
| 
       47 
72 
     | 
    
         
             
                    - try to detect signals around a fork faster (test program by
         
     | 
| 
         @@ -50,7 +75,7 @@ TODO: document portbaility requirements for atomic pointer access 
     | 
|
| 
       50 
75 
     | 
    
         
             
                    - rename ev::embed::set to ev::embed::set_embed to avoid clashing
         
     | 
| 
       51 
76 
     | 
    
         
             
                      the watcher base set (loop) method.
         
     | 
| 
       52 
77 
     | 
    
         
             
                    - rewrite the async/signal pipe logic to always keep a valid fd, which
         
     | 
| 
       53 
     | 
    
         
            -
                      simplifies (and  
     | 
| 
      
 78 
     | 
    
         
            +
                      simplifies (and hopefully correctifies :) the race checking
         
     | 
| 
       54 
79 
     | 
    
         
             
                      on fork, at the cost of one extra fd.
         
     | 
| 
       55 
80 
     | 
    
         
             
                    - add fat, msdos, jffs2, ramfs, ntfs and btrfs to the list of
         
     | 
| 
       56 
81 
     | 
    
         
             
                      inotify-supporting filesystems.
         
     | 
| 
         @@ -252,7 +277,7 @@ TODO: document portbaility requirements for atomic pointer access 
     | 
|
| 
       252 
277 
     | 
    
         
             
                    - implement ev_suspend and ev_resume.
         
     | 
| 
       253 
278 
     | 
    
         
             
                    - new EV_CUSTOM revents flag for use by applications.
         
     | 
| 
       254 
279 
     | 
    
         
             
                    - add documentation section about priorities.
         
     | 
| 
       255 
     | 
    
         
            -
                    - add a glossary to the  
     | 
| 
      
 280 
     | 
    
         
            +
                    - add a glossary to the documentation.
         
     | 
| 
       256 
281 
     | 
    
         
             
                    - extend the ev_fork description slightly.
         
     | 
| 
       257 
282 
     | 
    
         
             
                    - optimize a jump out of call_pending.
         
     | 
| 
       258 
283 
     | 
    
         | 
    
        data/ext/libev/LICENSE
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            All files in libev are
         
     | 
| 
       2 
     | 
    
         
            -
            Copyright (c)2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann.
         
     | 
| 
      
 2 
     | 
    
         
            +
            Copyright (c)2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann.
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            Redistribution and use in source and binary forms, with or without
         
     | 
| 
       5 
5 
     | 
    
         
             
            modification, are permitted provided that the following conditions are
         
     | 
    
        data/ext/libev/README
    CHANGED
    
    | 
         @@ -14,7 +14,7 @@ ABOUT 
     | 
|
| 
       14 
14 
     | 
    
         
             
               featureful. And also smaller. Yay.
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
               Some of the specialties of libev not commonly found elsewhere are:
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
               
         
     | 
| 
       18 
18 
     | 
    
         
             
               - extensive and detailed, readable documentation (not doxygen garbage).
         
     | 
| 
       19 
19 
     | 
    
         
             
               - fully supports fork, can detect fork in various ways and automatically
         
     | 
| 
       20 
20 
     | 
    
         
             
                 re-arms kernel mechanisms that do not support fork.
         
     | 
    
        data/ext/libev/ev.c
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
             * libev event processing core, watcher management
         
     | 
| 
       3 
3 
     | 
    
         
             
             *
         
     | 
| 
       4 
     | 
    
         
            -
             * Copyright (c) 2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann <libev@schmorp.de>
         
     | 
| 
      
 4 
     | 
    
         
            +
             * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <libev@schmorp.de>
         
     | 
| 
       5 
5 
     | 
    
         
             
             * All rights reserved.
         
     | 
| 
       6 
6 
     | 
    
         
             
             *
         
     | 
| 
       7 
7 
     | 
    
         
             
             * Redistribution and use in source and binary forms, with or without modifica-
         
     | 
| 
         @@ -49,11 +49,11 @@ 
     | 
|
| 
       49 
49 
     | 
    
         
             
            #  include "config.h"
         
     | 
| 
       50 
50 
     | 
    
         
             
            # endif
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
            #if HAVE_FLOOR
         
     | 
| 
       53 
     | 
    
         
            -
            # 
     | 
| 
       54 
     | 
    
         
            -
            # 
     | 
| 
      
 52 
     | 
    
         
            +
            # if HAVE_FLOOR
         
     | 
| 
      
 53 
     | 
    
         
            +
            #  ifndef EV_USE_FLOOR
         
     | 
| 
      
 54 
     | 
    
         
            +
            #   define EV_USE_FLOOR 1
         
     | 
| 
      
 55 
     | 
    
         
            +
            #  endif
         
     | 
| 
       55 
56 
     | 
    
         
             
            # endif
         
     | 
| 
       56 
     | 
    
         
            -
            #endif
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            # if HAVE_CLOCK_SYSCALL
         
     | 
| 
       59 
59 
     | 
    
         
             
            #  ifndef EV_USE_CLOCK_SYSCALL
         
     | 
| 
         @@ -111,7 +111,7 @@ 
     | 
|
| 
       111 
111 
     | 
    
         
             
            #  undef EV_USE_POLL
         
     | 
| 
       112 
112 
     | 
    
         
             
            #  define EV_USE_POLL 0
         
     | 
| 
       113 
113 
     | 
    
         
             
            # endif
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
      
 114 
     | 
    
         
            +
               
         
     | 
| 
       115 
115 
     | 
    
         
             
            # if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H
         
     | 
| 
       116 
116 
     | 
    
         
             
            #  ifndef EV_USE_EPOLL
         
     | 
| 
       117 
117 
     | 
    
         
             
            #   define EV_USE_EPOLL EV_FEATURE_BACKENDS
         
     | 
| 
         @@ -120,7 +120,7 @@ 
     | 
|
| 
       120 
120 
     | 
    
         
             
            #  undef EV_USE_EPOLL
         
     | 
| 
       121 
121 
     | 
    
         
             
            #  define EV_USE_EPOLL 0
         
     | 
| 
       122 
122 
     | 
    
         
             
            # endif
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
      
 123 
     | 
    
         
            +
               
         
     | 
| 
       124 
124 
     | 
    
         
             
            # if HAVE_KQUEUE && HAVE_SYS_EVENT_H
         
     | 
| 
       125 
125 
     | 
    
         
             
            #  ifndef EV_USE_KQUEUE
         
     | 
| 
       126 
126 
     | 
    
         
             
            #   define EV_USE_KQUEUE EV_FEATURE_BACKENDS
         
     | 
| 
         @@ -129,7 +129,7 @@ 
     | 
|
| 
       129 
129 
     | 
    
         
             
            #  undef EV_USE_KQUEUE
         
     | 
| 
       130 
130 
     | 
    
         
             
            #  define EV_USE_KQUEUE 0
         
     | 
| 
       131 
131 
     | 
    
         
             
            # endif
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
      
 132 
     | 
    
         
            +
               
         
     | 
| 
       133 
133 
     | 
    
         
             
            # if HAVE_PORT_H && HAVE_PORT_CREATE
         
     | 
| 
       134 
134 
     | 
    
         
             
            #  ifndef EV_USE_PORT
         
     | 
| 
       135 
135 
     | 
    
         
             
            #   define EV_USE_PORT EV_FEATURE_BACKENDS
         
     | 
| 
         @@ -165,7 +165,7 @@ 
     | 
|
| 
       165 
165 
     | 
    
         
             
            #  undef EV_USE_EVENTFD
         
     | 
| 
       166 
166 
     | 
    
         
             
            #  define EV_USE_EVENTFD 0
         
     | 
| 
       167 
167 
     | 
    
         
             
            # endif
         
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
      
 168 
     | 
    
         
            +
             
         
     | 
| 
       169 
169 
     | 
    
         
             
            #endif
         
     | 
| 
       170 
170 
     | 
    
         | 
| 
       171 
171 
     | 
    
         
             
            #include <stdlib.h>
         
     | 
| 
         @@ -247,10 +247,7 @@ 
     | 
|
| 
       247 
247 
     | 
    
         
             
            #elif defined _sys_nsig
         
     | 
| 
       248 
248 
     | 
    
         
             
            # define EV_NSIG (_sys_nsig) /* Solaris 2.5 */
         
     | 
| 
       249 
249 
     | 
    
         
             
            #else
         
     | 
| 
       250 
     | 
    
         
            -
            #  
     | 
| 
       251 
     | 
    
         
            -
            /* to make it compile regardless, just remove the above line, */
         
     | 
| 
       252 
     | 
    
         
            -
            /* but consider reporting it, too! :) */
         
     | 
| 
       253 
     | 
    
         
            -
            # define EV_NSIG 65
         
     | 
| 
      
 250 
     | 
    
         
            +
            # define EV_NSIG (8 * sizeof (sigset_t) + 1)
         
     | 
| 
       254 
251 
     | 
    
         
             
            #endif
         
     | 
| 
       255 
252 
     | 
    
         | 
| 
       256 
253 
     | 
    
         
             
            #ifndef EV_USE_FLOOR
         
     | 
| 
         @@ -258,13 +255,22 @@ 
     | 
|
| 
       258 
255 
     | 
    
         
             
            #endif
         
     | 
| 
       259 
256 
     | 
    
         | 
| 
       260 
257 
     | 
    
         
             
            #ifndef EV_USE_CLOCK_SYSCALL
         
     | 
| 
       261 
     | 
    
         
            -
            # if __linux && __GLIBC__  
     | 
| 
      
 258 
     | 
    
         
            +
            # if __linux && __GLIBC__ == 2 && __GLIBC_MINOR__ < 17
         
     | 
| 
       262 
259 
     | 
    
         
             
            #  define EV_USE_CLOCK_SYSCALL EV_FEATURE_OS
         
     | 
| 
       263 
260 
     | 
    
         
             
            # else
         
     | 
| 
       264 
261 
     | 
    
         
             
            #  define EV_USE_CLOCK_SYSCALL 0
         
     | 
| 
       265 
262 
     | 
    
         
             
            # endif
         
     | 
| 
       266 
263 
     | 
    
         
             
            #endif
         
     | 
| 
       267 
264 
     | 
    
         | 
| 
      
 265 
     | 
    
         
            +
            #if !(_POSIX_TIMERS > 0)
         
     | 
| 
      
 266 
     | 
    
         
            +
            # ifndef EV_USE_MONOTONIC
         
     | 
| 
      
 267 
     | 
    
         
            +
            #  define EV_USE_MONOTONIC 0
         
     | 
| 
      
 268 
     | 
    
         
            +
            # endif
         
     | 
| 
      
 269 
     | 
    
         
            +
            # ifndef EV_USE_REALTIME
         
     | 
| 
      
 270 
     | 
    
         
            +
            #  define EV_USE_REALTIME 0
         
     | 
| 
      
 271 
     | 
    
         
            +
            # endif
         
     | 
| 
      
 272 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 273 
     | 
    
         
            +
             
     | 
| 
       268 
274 
     | 
    
         
             
            #ifndef EV_USE_MONOTONIC
         
     | 
| 
       269 
275 
     | 
    
         
             
            # if defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0
         
     | 
| 
       270 
276 
     | 
    
         
             
            #  define EV_USE_MONOTONIC EV_FEATURE_OS
         
     | 
| 
         @@ -491,7 +497,7 @@ struct signalfd_siginfo 
     | 
|
| 
       491 
497 
     | 
    
         
             
            /*
         
     | 
| 
       492 
498 
     | 
    
         
             
             * libecb - http://software.schmorp.de/pkg/libecb
         
     | 
| 
       493 
499 
     | 
    
         
             
             *
         
     | 
| 
       494 
     | 
    
         
            -
             * Copyright (©) 2009- 
     | 
| 
      
 500 
     | 
    
         
            +
             * Copyright (©) 2009-2014 Marc Alexander Lehmann <libecb@schmorp.de>
         
     | 
| 
       495 
501 
     | 
    
         
             
             * Copyright (©) 2011 Emanuele Giaquinta
         
     | 
| 
       496 
502 
     | 
    
         
             
             * All rights reserved.
         
     | 
| 
       497 
503 
     | 
    
         
             
             *
         
     | 
| 
         @@ -515,6 +521,17 @@ struct signalfd_siginfo 
     | 
|
| 
       515 
521 
     | 
    
         
             
             * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
         
     | 
| 
       516 
522 
     | 
    
         
             
             * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
         
     | 
| 
       517 
523 
     | 
    
         
             
             * OF THE POSSIBILITY OF SUCH DAMAGE.
         
     | 
| 
      
 524 
     | 
    
         
            +
             *
         
     | 
| 
      
 525 
     | 
    
         
            +
             * Alternatively, the contents of this file may be used under the terms of
         
     | 
| 
      
 526 
     | 
    
         
            +
             * the GNU General Public License ("GPL") version 2 or any later version,
         
     | 
| 
      
 527 
     | 
    
         
            +
             * in which case the provisions of the GPL are applicable instead of
         
     | 
| 
      
 528 
     | 
    
         
            +
             * the above. If you wish to allow the use of your version of this file
         
     | 
| 
      
 529 
     | 
    
         
            +
             * only under the terms of the GPL and not to allow others to use your
         
     | 
| 
      
 530 
     | 
    
         
            +
             * version of this file under the BSD license, indicate your decision
         
     | 
| 
      
 531 
     | 
    
         
            +
             * by deleting the provisions above and replace them with the notice
         
     | 
| 
      
 532 
     | 
    
         
            +
             * and other provisions required by the GPL. If you do not delete the
         
     | 
| 
      
 533 
     | 
    
         
            +
             * provisions above, a recipient may use your version of this file under
         
     | 
| 
      
 534 
     | 
    
         
            +
             * either the BSD or the GPL.
         
     | 
| 
       518 
535 
     | 
    
         
             
             */
         
     | 
| 
       519 
536 
     | 
    
         | 
| 
       520 
537 
     | 
    
         
             
            #ifndef ECB_H
         
     | 
| 
         @@ -556,8 +573,8 @@ struct signalfd_siginfo 
     | 
|
| 
       556 
573 
     | 
    
         
             
            #endif
         
     | 
| 
       557 
574 
     | 
    
         | 
| 
       558 
575 
     | 
    
         
             
            /* work around x32 idiocy by defining proper macros */
         
     | 
| 
       559 
     | 
    
         
            -
            #if __x86_64 || _M_AMD64
         
     | 
| 
       560 
     | 
    
         
            -
              #if  
     | 
| 
      
 576 
     | 
    
         
            +
            #if __amd64 || __x86_64 || _M_AMD64 || _M_X64
         
     | 
| 
      
 577 
     | 
    
         
            +
              #if _ILP32
         
     | 
| 
       561 
578 
     | 
    
         
             
                #define ECB_AMD64_X32 1
         
     | 
| 
       562 
579 
     | 
    
         
             
              #else
         
     | 
| 
       563 
580 
     | 
    
         
             
                #define ECB_AMD64 1
         
     | 
| 
         @@ -579,12 +596,20 @@ struct signalfd_siginfo 
     | 
|
| 
       579 
596 
     | 
    
         
             
              #endif
         
     | 
| 
       580 
597 
     | 
    
         
             
            #endif
         
     | 
| 
       581 
598 
     | 
    
         | 
| 
       582 
     | 
    
         
            -
            #define ECB_C     (__STDC__+0) /* this assumes that __STDC__ is either empty or a number */
         
     | 
| 
       583 
     | 
    
         
            -
            #define ECB_C99   (__STDC_VERSION__ >= 199901L)
         
     | 
| 
       584 
     | 
    
         
            -
            #define ECB_C11   (__STDC_VERSION__ >= 201112L)
         
     | 
| 
       585 
599 
     | 
    
         
             
            #define ECB_CPP   (__cplusplus+0)
         
     | 
| 
       586 
600 
     | 
    
         
             
            #define ECB_CPP11 (__cplusplus >= 201103L)
         
     | 
| 
       587 
601 
     | 
    
         | 
| 
      
 602 
     | 
    
         
            +
            #if ECB_CPP
         
     | 
| 
      
 603 
     | 
    
         
            +
              #define ECB_C            0
         
     | 
| 
      
 604 
     | 
    
         
            +
              #define ECB_STDC_VERSION 0
         
     | 
| 
      
 605 
     | 
    
         
            +
            #else
         
     | 
| 
      
 606 
     | 
    
         
            +
              #define ECB_C            1
         
     | 
| 
      
 607 
     | 
    
         
            +
              #define ECB_STDC_VERSION __STDC_VERSION__
         
     | 
| 
      
 608 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 609 
     | 
    
         
            +
             
     | 
| 
      
 610 
     | 
    
         
            +
            #define ECB_C99   (ECB_STDC_VERSION >= 199901L)
         
     | 
| 
      
 611 
     | 
    
         
            +
            #define ECB_C11   (ECB_STDC_VERSION >= 201112L)
         
     | 
| 
      
 612 
     | 
    
         
            +
             
     | 
| 
       588 
613 
     | 
    
         
             
            #if ECB_CPP
         
     | 
| 
       589 
614 
     | 
    
         
             
              #define ECB_EXTERN_C extern "C"
         
     | 
| 
       590 
615 
     | 
    
         
             
              #define ECB_EXTERN_C_BEG ECB_EXTERN_C {
         
     | 
| 
         @@ -626,14 +651,18 @@ struct signalfd_siginfo 
     | 
|
| 
       626 
651 
     | 
    
         
             
                #elif defined __ARM_ARCH_7__  || defined __ARM_ARCH_7A__  \
         
     | 
| 
       627 
652 
     | 
    
         
             
                   || defined __ARM_ARCH_7M__ || defined __ARM_ARCH_7R__
         
     | 
| 
       628 
653 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ ("dmb"      : : : "memory")
         
     | 
| 
       629 
     | 
    
         
            -
                #elif  
     | 
| 
      
 654 
     | 
    
         
            +
                #elif __aarch64__
         
     | 
| 
      
 655 
     | 
    
         
            +
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ ("dmb ish"  : : : "memory")
         
     | 
| 
      
 656 
     | 
    
         
            +
                #elif (__sparc || __sparc__) && !__sparcv8
         
     | 
| 
       630 
657 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ ("membar #LoadStore | #LoadLoad | #StoreStore | #StoreLoad" : : : "memory")
         
     | 
| 
       631 
658 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad"                            : : : "memory")
         
     | 
| 
       632 
659 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore             | #StoreStore")
         
     | 
| 
       633 
660 
     | 
    
         
             
                #elif defined __s390__ || defined __s390x__
         
     | 
| 
       634 
661 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ ("bcr 15,0" : : : "memory")
         
     | 
| 
       635 
662 
     | 
    
         
             
                #elif defined __mips__
         
     | 
| 
       636 
     | 
    
         
            -
                   
     | 
| 
      
 663 
     | 
    
         
            +
                  /* GNU/Linux emulates sync on mips1 architectures, so we force its use */
         
     | 
| 
      
 664 
     | 
    
         
            +
                  /* anybody else who still uses mips1 is supposed to send in their version, with detection code. */
         
     | 
| 
      
 665 
     | 
    
         
            +
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ (".set mips2; sync; .set mips0" : : : "memory")
         
     | 
| 
       637 
666 
     | 
    
         
             
                #elif defined __alpha__
         
     | 
| 
       638 
667 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ ("mb"       : : : "memory")
         
     | 
| 
       639 
668 
     | 
    
         
             
                #elif defined __hppa__
         
     | 
| 
         @@ -641,6 +670,12 @@ struct signalfd_siginfo 
     | 
|
| 
       641 
670 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("")
         
     | 
| 
       642 
671 
     | 
    
         
             
                #elif defined __ia64__
         
     | 
| 
       643 
672 
     | 
    
         
             
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ ("mf"       : : : "memory")
         
     | 
| 
      
 673 
     | 
    
         
            +
                #elif defined __m68k__
         
     | 
| 
      
 674 
     | 
    
         
            +
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ (""         : : : "memory")
         
     | 
| 
      
 675 
     | 
    
         
            +
                #elif defined __m88k__
         
     | 
| 
      
 676 
     | 
    
         
            +
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ ("tb1 0,%%r0,128" : : : "memory")
         
     | 
| 
      
 677 
     | 
    
         
            +
                #elif defined __sh__
         
     | 
| 
      
 678 
     | 
    
         
            +
                  #define ECB_MEMORY_FENCE         __asm__ __volatile__ (""         : : : "memory")
         
     | 
| 
       644 
679 
     | 
    
         
             
                #endif
         
     | 
| 
       645 
680 
     | 
    
         
             
              #endif
         
     | 
| 
       646 
681 
     | 
    
         
             
            #endif
         
     | 
| 
         @@ -649,6 +684,8 @@ struct signalfd_siginfo 
     | 
|
| 
       649 
684 
     | 
    
         
             
              #if ECB_GCC_VERSION(4,7)
         
     | 
| 
       650 
685 
     | 
    
         
             
                /* see comment below (stdatomic.h) about the C11 memory model. */
         
     | 
| 
       651 
686 
     | 
    
         
             
                #define ECB_MEMORY_FENCE         __atomic_thread_fence (__ATOMIC_SEQ_CST)
         
     | 
| 
      
 687 
     | 
    
         
            +
                #define ECB_MEMORY_FENCE_ACQUIRE __atomic_thread_fence (__ATOMIC_ACQUIRE)
         
     | 
| 
      
 688 
     | 
    
         
            +
                #define ECB_MEMORY_FENCE_RELEASE __atomic_thread_fence (__ATOMIC_RELEASE)
         
     | 
| 
       652 
689 
     | 
    
         | 
| 
       653 
690 
     | 
    
         
             
              /* The __has_feature syntax from clang is so misdesigned that we cannot use it
         
     | 
| 
       654 
691 
     | 
    
         
             
               * without risking compile time errors with other compilers. We *could*
         
     | 
| 
         @@ -657,10 +694,18 @@ struct signalfd_siginfo 
     | 
|
| 
       657 
694 
     | 
    
         
             
               * #elif defined __clang && __has_feature (cxx_atomic)
         
     | 
| 
       658 
695 
     | 
    
         
             
               *   // see comment below (stdatomic.h) about the C11 memory model.
         
     | 
| 
       659 
696 
     | 
    
         
             
               *   #define ECB_MEMORY_FENCE         __c11_atomic_thread_fence (__ATOMIC_SEQ_CST)
         
     | 
| 
      
 697 
     | 
    
         
            +
               *   #define ECB_MEMORY_FENCE_ACQUIRE __c11_atomic_thread_fence (__ATOMIC_ACQUIRE)
         
     | 
| 
      
 698 
     | 
    
         
            +
               *   #define ECB_MEMORY_FENCE_RELEASE __c11_atomic_thread_fence (__ATOMIC_RELEASE)
         
     | 
| 
       660 
699 
     | 
    
         
             
               */
         
     | 
| 
       661 
700 
     | 
    
         | 
| 
       662 
701 
     | 
    
         
             
              #elif ECB_GCC_VERSION(4,4) || defined __INTEL_COMPILER || defined __clang__
         
     | 
| 
       663 
702 
     | 
    
         
             
                #define ECB_MEMORY_FENCE         __sync_synchronize ()
         
     | 
| 
      
 703 
     | 
    
         
            +
              #elif _MSC_VER >= 1500 /* VC++ 2008 */
         
     | 
| 
      
 704 
     | 
    
         
            +
                /* apparently, microsoft broke all the memory barrier stuff in Visual Studio 2008... */
         
     | 
| 
      
 705 
     | 
    
         
            +
                #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier)
         
     | 
| 
      
 706 
     | 
    
         
            +
                #define ECB_MEMORY_FENCE         _ReadWriteBarrier (); MemoryBarrier()
         
     | 
| 
      
 707 
     | 
    
         
            +
                #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier (); MemoryBarrier() /* according to msdn, _ReadBarrier is not a load fence */
         
     | 
| 
      
 708 
     | 
    
         
            +
                #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier (); MemoryBarrier()
         
     | 
| 
       664 
709 
     | 
    
         
             
              #elif _MSC_VER >= 1400 /* VC++ 2005 */
         
     | 
| 
       665 
710 
     | 
    
         
             
                #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier)
         
     | 
| 
       666 
711 
     | 
    
         
             
                #define ECB_MEMORY_FENCE         _ReadWriteBarrier ()
         
     | 
| 
         @@ -690,6 +735,8 @@ struct signalfd_siginfo 
     | 
|
| 
       690 
735 
     | 
    
         
             
                /* for most usages, or gcc and clang have a bug */
         
     | 
| 
       691 
736 
     | 
    
         
             
                /* I *currently* lean towards the latter, and inefficiently implement */
         
     | 
| 
       692 
737 
     | 
    
         
             
                /* all three of ecb's fences as a seq_cst fence */
         
     | 
| 
      
 738 
     | 
    
         
            +
                /* Update, gcc-4.8 generates mfence for all c++ fences, but nothing */
         
     | 
| 
      
 739 
     | 
    
         
            +
                /* for all __atomic_thread_fence's except seq_cst */
         
     | 
| 
       693 
740 
     | 
    
         
             
                #define ECB_MEMORY_FENCE         atomic_thread_fence (memory_order_seq_cst)
         
     | 
| 
       694 
741 
     | 
    
         
             
              #endif
         
     | 
| 
       695 
742 
     | 
    
         
             
            #endif
         
     | 
| 
         @@ -756,6 +803,11 @@ typedef int ecb_bool; 
     | 
|
| 
       756 
803 
     | 
    
         
             
              #define ecb_prefetch(addr,rw,locality) __builtin_prefetch (addr, rw, locality)
         
     | 
| 
       757 
804 
     | 
    
         
             
            #else
         
     | 
| 
       758 
805 
     | 
    
         
             
              #define ecb_attribute(attrlist)
         
     | 
| 
      
 806 
     | 
    
         
            +
             
     | 
| 
      
 807 
     | 
    
         
            +
              /* possible C11 impl for integral types
         
     | 
| 
      
 808 
     | 
    
         
            +
              typedef struct ecb_is_constant_struct ecb_is_constant_struct;
         
     | 
| 
      
 809 
     | 
    
         
            +
              #define ecb_is_constant(expr)          _Generic ((1 ? (struct ecb_is_constant_struct *)0 : (void *)((expr) - (expr)), ecb_is_constant_struct *: 0, default: 1)) */
         
     | 
| 
      
 810 
     | 
    
         
            +
             
     | 
| 
       759 
811 
     | 
    
         
             
              #define ecb_is_constant(expr)          0
         
     | 
| 
       760 
812 
     | 
    
         
             
              #define ecb_expect(expr,value)         (expr)
         
     | 
| 
       761 
813 
     | 
    
         
             
              #define ecb_prefetch(addr,rw,locality)
         
     | 
| 
         @@ -768,11 +820,18 @@ typedef int ecb_bool; 
     | 
|
| 
       768 
820 
     | 
    
         
             
              #define ecb_decltype(x) __typeof(x)
         
     | 
| 
       769 
821 
     | 
    
         
             
            #endif
         
     | 
| 
       770 
822 
     | 
    
         | 
| 
      
 823 
     | 
    
         
            +
            #if _MSC_VER >= 1300
         
     | 
| 
      
 824 
     | 
    
         
            +
              #define ecb_deprecated __declspec(deprecated)
         
     | 
| 
      
 825 
     | 
    
         
            +
            #else
         
     | 
| 
      
 826 
     | 
    
         
            +
              #define ecb_deprecated ecb_attribute ((__deprecated__))
         
     | 
| 
      
 827 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 828 
     | 
    
         
            +
             
     | 
| 
       771 
829 
     | 
    
         
             
            #define ecb_noinline   ecb_attribute ((__noinline__))
         
     | 
| 
       772 
830 
     | 
    
         
             
            #define ecb_unused     ecb_attribute ((__unused__))
         
     | 
| 
       773 
831 
     | 
    
         
             
            #define ecb_const      ecb_attribute ((__const__))
         
     | 
| 
       774 
832 
     | 
    
         
             
            #define ecb_pure       ecb_attribute ((__pure__))
         
     | 
| 
       775 
833 
     | 
    
         | 
| 
      
 834 
     | 
    
         
            +
            /* http://msdn.microsoft.com/en-us/library/k6ktzx3s.aspx __declspec(noreturn) */
         
     | 
| 
       776 
835 
     | 
    
         
             
            #if ECB_C11
         
     | 
| 
       777 
836 
     | 
    
         
             
              #define ecb_noreturn   _Noreturn
         
     | 
| 
       778 
837 
     | 
    
         
             
            #else
         
     | 
| 
         @@ -887,7 +946,7 @@ ecb_function_ uint8_t  ecb_bitrev8  (uint8_t  x) ecb_const; 
     | 
|
| 
       887 
946 
     | 
    
         
             
            ecb_function_ uint8_t  ecb_bitrev8  (uint8_t  x)
         
     | 
| 
       888 
947 
     | 
    
         
             
            {
         
     | 
| 
       889 
948 
     | 
    
         
             
              return (  (x * 0x0802U & 0x22110U)
         
     | 
| 
       890 
     | 
    
         
            -
                      | (x * 0x8020U & 0x88440U)) * 0x10101U >> 16;
         
     | 
| 
      
 949 
     | 
    
         
            +
                      | (x * 0x8020U & 0x88440U)) * 0x10101U >> 16; 
         
     | 
| 
       891 
950 
     | 
    
         
             
            }
         
     | 
| 
       892 
951 
     | 
    
         | 
| 
       893 
952 
     | 
    
         
             
            ecb_function_ uint16_t ecb_bitrev16 (uint16_t x) ecb_const;
         
     | 
| 
         @@ -1051,22 +1110,57 @@ ecb_inline ecb_bool ecb_little_endian (void) { return ecb_byteorder_helper () == 
     | 
|
| 
       1051 
1110 
     | 
    
         
             
                || __i386 || __i386__ \
         
     | 
| 
       1052 
1111 
     | 
    
         
             
                || __amd64 || __amd64__ || __x86_64 || __x86_64__ \
         
     | 
| 
       1053 
1112 
     | 
    
         
             
                || __powerpc__ || __ppc__ || __powerpc64__ || __ppc64__ \
         
     | 
| 
       1054 
     | 
    
         
            -
                || defined __arm__ && defined __ARM_EABI__ \
         
     | 
| 
       1055 
1113 
     | 
    
         
             
                || defined __s390__ || defined __s390x__ \
         
     | 
| 
       1056 
1114 
     | 
    
         
             
                || defined __mips__ \
         
     | 
| 
       1057 
1115 
     | 
    
         
             
                || defined __alpha__ \
         
     | 
| 
       1058 
1116 
     | 
    
         
             
                || defined __hppa__ \
         
     | 
| 
       1059 
1117 
     | 
    
         
             
                || defined __ia64__ \
         
     | 
| 
       1060 
     | 
    
         
            -
                || defined  
     | 
| 
      
 1118 
     | 
    
         
            +
                || defined __m68k__ \
         
     | 
| 
      
 1119 
     | 
    
         
            +
                || defined __m88k__ \
         
     | 
| 
      
 1120 
     | 
    
         
            +
                || defined __sh__ \
         
     | 
| 
      
 1121 
     | 
    
         
            +
                || defined _M_IX86 || defined _M_AMD64 || defined _M_IA64 \
         
     | 
| 
      
 1122 
     | 
    
         
            +
                || (defined __arm__ && (defined __ARM_EABI__ || defined __EABI__ || defined __VFP_FP__ || defined _WIN32_WCE || defined __ANDROID__)) \
         
     | 
| 
      
 1123 
     | 
    
         
            +
                || defined __aarch64__
         
     | 
| 
       1061 
1124 
     | 
    
         
             
              #define ECB_STDFP 1
         
     | 
| 
       1062 
1125 
     | 
    
         
             
              #include <string.h> /* for memcpy */
         
     | 
| 
       1063 
1126 
     | 
    
         
             
            #else
         
     | 
| 
       1064 
1127 
     | 
    
         
             
              #define ECB_STDFP 0
         
     | 
| 
       1065 
     | 
    
         
            -
              #include <math.h> /* for frexp*, ldexp* */
         
     | 
| 
       1066 
1128 
     | 
    
         
             
            #endif
         
     | 
| 
       1067 
1129 
     | 
    
         | 
| 
       1068 
1130 
     | 
    
         
             
            #ifndef ECB_NO_LIBM
         
     | 
| 
       1069 
1131 
     | 
    
         | 
| 
      
 1132 
     | 
    
         
            +
              #include <math.h> /* for frexp*, ldexp*, INFINITY, NAN */
         
     | 
| 
      
 1133 
     | 
    
         
            +
             
     | 
| 
      
 1134 
     | 
    
         
            +
              /* only the oldest of old doesn't have this one. solaris. */
         
     | 
| 
      
 1135 
     | 
    
         
            +
              #ifdef INFINITY
         
     | 
| 
      
 1136 
     | 
    
         
            +
                #define ECB_INFINITY INFINITY
         
     | 
| 
      
 1137 
     | 
    
         
            +
              #else
         
     | 
| 
      
 1138 
     | 
    
         
            +
                #define ECB_INFINITY HUGE_VAL
         
     | 
| 
      
 1139 
     | 
    
         
            +
              #endif
         
     | 
| 
      
 1140 
     | 
    
         
            +
             
     | 
| 
      
 1141 
     | 
    
         
            +
              #ifdef NAN
         
     | 
| 
      
 1142 
     | 
    
         
            +
                #define ECB_NAN NAN
         
     | 
| 
      
 1143 
     | 
    
         
            +
              #else
         
     | 
| 
      
 1144 
     | 
    
         
            +
                #define ECB_NAN ECB_INFINITY
         
     | 
| 
      
 1145 
     | 
    
         
            +
              #endif
         
     | 
| 
      
 1146 
     | 
    
         
            +
             
     | 
| 
      
 1147 
     | 
    
         
            +
              /* converts an ieee half/binary16 to a float */
         
     | 
| 
      
 1148 
     | 
    
         
            +
              ecb_function_ float ecb_binary16_to_float (uint16_t x) ecb_const;
         
     | 
| 
      
 1149 
     | 
    
         
            +
              ecb_function_ float
         
     | 
| 
      
 1150 
     | 
    
         
            +
              ecb_binary16_to_float (uint16_t x)
         
     | 
| 
      
 1151 
     | 
    
         
            +
              {
         
     | 
| 
      
 1152 
     | 
    
         
            +
                int e = (x >> 10) & 0x1f;
         
     | 
| 
      
 1153 
     | 
    
         
            +
                int m = x & 0x3ff;
         
     | 
| 
      
 1154 
     | 
    
         
            +
                float r;
         
     | 
| 
      
 1155 
     | 
    
         
            +
             
     | 
| 
      
 1156 
     | 
    
         
            +
                if      (!e     ) r = ldexpf (m        ,    -24);
         
     | 
| 
      
 1157 
     | 
    
         
            +
                else if (e != 31) r = ldexpf (m + 0x400, e - 25);
         
     | 
| 
      
 1158 
     | 
    
         
            +
                else if (m      ) r = ECB_NAN;
         
     | 
| 
      
 1159 
     | 
    
         
            +
                else              r = ECB_INFINITY;
         
     | 
| 
      
 1160 
     | 
    
         
            +
             
     | 
| 
      
 1161 
     | 
    
         
            +
                return x & 0x8000 ? -r : r;
         
     | 
| 
      
 1162 
     | 
    
         
            +
              }
         
     | 
| 
      
 1163 
     | 
    
         
            +
             
     | 
| 
       1070 
1164 
     | 
    
         
             
              /* convert a float to ieee single/binary32 */
         
     | 
| 
       1071 
1165 
     | 
    
         
             
              ecb_function_ uint32_t ecb_float_to_binary32 (float x) ecb_const;
         
     | 
| 
       1072 
1166 
     | 
    
         
             
              ecb_function_ uint32_t
         
     | 
| 
         @@ -2017,7 +2111,7 @@ downheap (ANHE *heap, int N, int k) 
     | 
|
| 
       2017 
2111 
     | 
    
         | 
| 
       2018 
2112 
     | 
    
         
             
                  heap [k] = heap [c];
         
     | 
| 
       2019 
2113 
     | 
    
         
             
                  ev_active (ANHE_w (heap [k])) = k;
         
     | 
| 
       2020 
     | 
    
         
            -
             
     | 
| 
      
 2114 
     | 
    
         
            +
                  
         
     | 
| 
       2021 
2115 
     | 
    
         
             
                  k = c;
         
     | 
| 
       2022 
2116 
     | 
    
         
             
                }
         
     | 
| 
       2023 
2117 
     | 
    
         | 
| 
         @@ -2110,8 +2204,6 @@ evpipe_init (EV_P) 
     | 
|
| 
       2110 
2204 
     | 
    
         
             
                      fd_intern (fds [0]);
         
     | 
| 
       2111 
2205 
     | 
    
         
             
                    }
         
     | 
| 
       2112 
2206 
     | 
    
         | 
| 
       2113 
     | 
    
         
            -
                  fd_intern (fds [1]);
         
     | 
| 
       2114 
     | 
    
         
            -
             
     | 
| 
       2115 
2207 
     | 
    
         
             
                  evpipe [0] = fds [0];
         
     | 
| 
       2116 
2208 
     | 
    
         | 
| 
       2117 
2209 
     | 
    
         
             
                  if (evpipe [1] < 0)
         
     | 
| 
         @@ -2127,6 +2219,8 @@ evpipe_init (EV_P) 
     | 
|
| 
       2127 
2219 
     | 
    
         
             
                      close (fds [1]);
         
     | 
| 
       2128 
2220 
     | 
    
         
             
                    }
         
     | 
| 
       2129 
2221 
     | 
    
         | 
| 
      
 2222 
     | 
    
         
            +
                  fd_intern (evpipe [1]);
         
     | 
| 
      
 2223 
     | 
    
         
            +
             
     | 
| 
       2130 
2224 
     | 
    
         
             
                  ev_io_set (&pipe_w, evpipe [0] < 0 ? evpipe [1] : evpipe [0], EV_READ);
         
     | 
| 
       2131 
2225 
     | 
    
         
             
                  ev_io_start (EV_A_ &pipe_w);
         
     | 
| 
       2132 
2226 
     | 
    
         
             
                  ev_unref (EV_A); /* watcher should not keep loop alive */
         
     | 
| 
         @@ -2437,7 +2531,7 @@ ev_supported_backends (void) EV_THROW 
     | 
|
| 
       2437 
2531 
     | 
    
         
             
              if (EV_USE_EPOLL ) flags |= EVBACKEND_EPOLL;
         
     | 
| 
       2438 
2532 
     | 
    
         
             
              if (EV_USE_POLL  ) flags |= EVBACKEND_POLL;
         
     | 
| 
       2439 
2533 
     | 
    
         
             
              if (EV_USE_SELECT) flags |= EVBACKEND_SELECT;
         
     | 
| 
       2440 
     | 
    
         
            -
             
     | 
| 
      
 2534 
     | 
    
         
            +
              
         
     | 
| 
       2441 
2535 
     | 
    
         
             
              return flags;
         
     | 
| 
       2442 
2536 
     | 
    
         
             
            }
         
     | 
| 
       2443 
2537 
     | 
    
         | 
| 
         @@ -2519,7 +2613,7 @@ ev_userdata (EV_P) EV_THROW 
     | 
|
| 
       2519 
2613 
     | 
    
         
             
            }
         
     | 
| 
       2520 
2614 
     | 
    
         | 
| 
       2521 
2615 
     | 
    
         
             
            void
         
     | 
| 
       2522 
     | 
    
         
            -
            ev_set_invoke_pending_cb (EV_P_  
     | 
| 
      
 2616 
     | 
    
         
            +
            ev_set_invoke_pending_cb (EV_P_ ev_loop_callback invoke_pending_cb) EV_THROW
         
     | 
| 
       2523 
2617 
     | 
    
         
             
            {
         
     | 
| 
       2524 
2618 
     | 
    
         
             
              invoke_cb = invoke_pending_cb;
         
     | 
| 
       2525 
2619 
     | 
    
         
             
            }
         
     | 
| 
         @@ -3261,7 +3355,7 @@ VALUE ev_backend_poll(void *ptr) 
     | 
|
| 
       3261 
3355 
     | 
    
         
             
            int
         
     | 
| 
       3262 
3356 
     | 
    
         
             
            ev_run (EV_P_ int flags)
         
     | 
| 
       3263 
3357 
     | 
    
         
             
            {
         
     | 
| 
       3264 
     | 
    
         
            -
            /* ########## NIO4R PATCHERY HO! ########## */
         
     | 
| 
      
 3358 
     | 
    
         
            +
              /* ########## NIO4R PATCHERY HO! ########## */
         
     | 
| 
       3265 
3359 
     | 
    
         
             
            #if defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
         
     | 
| 
       3266 
3360 
     | 
    
         
             
                struct ev_poll_args poll_args;
         
     | 
| 
       3267 
3361 
     | 
    
         
             
            #endif
         
     | 
    
        data/ext/libev/ev.h
    CHANGED
    
    | 
         @@ -205,7 +205,7 @@ struct ev_loop; 
     | 
|
| 
       205 
205 
     | 
    
         
             
            /*****************************************************************************/
         
     | 
| 
       206 
206 
     | 
    
         | 
| 
       207 
207 
     | 
    
         
             
            #define EV_VERSION_MAJOR 4
         
     | 
| 
       208 
     | 
    
         
            -
            #define EV_VERSION_MINOR  
     | 
| 
      
 208 
     | 
    
         
            +
            #define EV_VERSION_MINOR 19
         
     | 
| 
       209 
209 
     | 
    
         | 
| 
       210 
210 
     | 
    
         
             
            /* eventmask, revents, events... */
         
     | 
| 
       211 
211 
     | 
    
         
             
            enum {
         
     | 
| 
         @@ -658,8 +658,10 @@ EV_API_DECL void ev_set_timeout_collect_interval (EV_P_ ev_tstamp interval) EV_T 
     | 
|
| 
       658 
658 
     | 
    
         
             
            /* advanced stuff for threading etc. support, see docs */
         
     | 
| 
       659 
659 
     | 
    
         
             
            EV_API_DECL void ev_set_userdata (EV_P_ void *data) EV_THROW;
         
     | 
| 
       660 
660 
     | 
    
         
             
            EV_API_DECL void *ev_userdata (EV_P) EV_THROW;
         
     | 
| 
       661 
     | 
    
         
            -
             
     | 
| 
       662 
     | 
    
         
            -
            EV_API_DECL void  
     | 
| 
      
 661 
     | 
    
         
            +
            typedef void (*ev_loop_callback)(EV_P);
         
     | 
| 
      
 662 
     | 
    
         
            +
            EV_API_DECL void ev_set_invoke_pending_cb (EV_P_ ev_loop_callback invoke_pending_cb) EV_THROW;
         
     | 
| 
      
 663 
     | 
    
         
            +
            /* C++ doesn't allow the use of the ev_loop_callback typedef here, so we need to spell it out*/
         
     | 
| 
      
 664 
     | 
    
         
            +
            EV_API_DECL void ev_set_loop_release_cb (EV_P_ void (*release)(EV_P) EV_THROW, void (*acquire)(EV_P) EV_THROW) EV_THROW;
         
     | 
| 
       663 
665 
     | 
    
         | 
| 
       664 
666 
     | 
    
         
             
            EV_API_DECL unsigned int ev_pending_count (EV_P) EV_THROW; /* number of pending events, if any */
         
     | 
| 
       665 
667 
     | 
    
         
             
            EV_API_DECL void ev_invoke_pending (EV_P); /* invoke all pending watchers */
         
     | 
| 
         @@ -730,7 +732,7 @@ EV_API_DECL void ev_resume  (EV_P) EV_THROW; 
     | 
|
| 
       730 
732 
     | 
    
         
             
            #endif
         
     | 
| 
       731 
733 
     | 
    
         | 
| 
       732 
734 
     | 
    
         
             
            /* stopping (enabling, adding) a watcher does nothing if it is already running */
         
     | 
| 
       733 
     | 
    
         
            -
            /* stopping (disabling, deleting) a watcher does nothing unless  
     | 
| 
      
 735 
     | 
    
         
            +
            /* stopping (disabling, deleting) a watcher does nothing unless it's already running */
         
     | 
| 
       734 
736 
     | 
    
         
             
            #if EV_PROTOTYPES
         
     | 
| 
       735 
737 
     | 
    
         | 
| 
       736 
738 
     | 
    
         
             
            /* feeds an event into a watcher as if the event actually occurred */
         
     | 
    
        data/ext/libev/ev_epoll.c
    CHANGED
    
    | 
         @@ -228,7 +228,10 @@ epoll_poll (EV_P_ ev_tstamp timeout) 
     | 
|
| 
       228 
228 
     | 
    
         
             
                  if (anfds [fd].emask & EV_EMASK_EPERM && events)
         
     | 
| 
       229 
229 
     | 
    
         
             
                    fd_event (EV_A_ fd, events);
         
     | 
| 
       230 
230 
     | 
    
         
             
                  else
         
     | 
| 
       231 
     | 
    
         
            -
                     
     | 
| 
      
 231 
     | 
    
         
            +
                    {
         
     | 
| 
      
 232 
     | 
    
         
            +
                      epoll_eperms [i] = epoll_eperms [--epoll_epermcnt];
         
     | 
| 
      
 233 
     | 
    
         
            +
                      anfds [fd].emask = 0;
         
     | 
| 
      
 234 
     | 
    
         
            +
                    }
         
     | 
| 
       232 
235 
     | 
    
         
             
                }
         
     | 
| 
       233 
236 
     | 
    
         
             
            }
         
     | 
| 
       234 
237 
     | 
    
         | 
    
        data/ext/libev/ev_kqueue.c
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
             * libev kqueue backend
         
     | 
| 
       3 
3 
     | 
    
         
             
             *
         
     | 
| 
       4 
     | 
    
         
            -
             * Copyright (c) 2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann <libev@schmorp.de>
         
     | 
| 
      
 4 
     | 
    
         
            +
             * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <libev@schmorp.de>
         
     | 
| 
       5 
5 
     | 
    
         
             
             * All rights reserved.
         
     | 
| 
       6 
6 
     | 
    
         
             
             *
         
     | 
| 
       7 
7 
     | 
    
         
             
             * Redistribution and use in source and binary forms, with or without modifica-
         
     | 
    
        data/ext/libev/ev_poll.c
    CHANGED
    
    
    
        data/ext/libev/ev_vars.h
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
             * loop member variable declarations
         
     | 
| 
       3 
3 
     | 
    
         
             
             *
         
     | 
| 
       4 
     | 
    
         
            -
             * Copyright (c) 2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann <libev@schmorp.de>
         
     | 
| 
      
 4 
     | 
    
         
            +
             * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <libev@schmorp.de>
         
     | 
| 
       5 
5 
     | 
    
         
             
             * All rights reserved.
         
     | 
| 
       6 
6 
     | 
    
         
             
             *
         
     | 
| 
       7 
7 
     | 
    
         
             
             * Redistribution and use in source and binary forms, with or without modifica-
         
     | 
| 
         @@ -194,9 +194,10 @@ VARx(unsigned int, loop_count) /* total number of loop iterations/blocks */ 
     | 
|
| 
       194 
194 
     | 
    
         
             
            VARx(unsigned int, loop_depth) /* #ev_run enters - #ev_run leaves */
         
     | 
| 
       195 
195 
     | 
    
         | 
| 
       196 
196 
     | 
    
         
             
            VARx(void *, userdata)
         
     | 
| 
      
 197 
     | 
    
         
            +
            /* C++ doesn't support the ev_loop_callback typedef here. stinks. */
         
     | 
| 
       197 
198 
     | 
    
         
             
            VAR (release_cb, void (*release_cb)(EV_P) EV_THROW)
         
     | 
| 
       198 
199 
     | 
    
         
             
            VAR (acquire_cb, void (*acquire_cb)(EV_P) EV_THROW)
         
     | 
| 
       199 
     | 
    
         
            -
            VAR (invoke_cb ,  
     | 
| 
      
 200 
     | 
    
         
            +
            VAR (invoke_cb , ev_loop_callback invoke_cb)
         
     | 
| 
       200 
201 
     | 
    
         
             
            #endif
         
     | 
| 
       201 
202 
     | 
    
         | 
| 
       202 
203 
     | 
    
         
             
            #undef VARx
         
     | 
    
        data/ext/nio4r/monitor.c
    CHANGED
    
    | 
         @@ -127,10 +127,13 @@ static VALUE NIO_Monitor_close(int argc, VALUE *argv, VALUE self) 
     | 
|
| 
       127 
127 
     | 
    
         
             
                selector = rb_ivar_get(self, rb_intern("selector"));
         
     | 
| 
       128 
128 
     | 
    
         | 
| 
       129 
129 
     | 
    
         
             
                if(selector != Qnil) {
         
     | 
| 
       130 
     | 
    
         
            -
                     
     | 
| 
      
 130 
     | 
    
         
            +
                    /* if ev_loop is 0, it means that the loop has been stopped already (see NIO_Selector_shutdown)*/
         
     | 
| 
      
 131 
     | 
    
         
            +
                    if(monitor->selector->ev_loop != 0) {
         
     | 
| 
      
 132 
     | 
    
         
            +
                      ev_io_stop(monitor->selector->ev_loop, &monitor->ev_io);
         
     | 
| 
      
 133 
     | 
    
         
            +
                    }
         
     | 
| 
       131 
134 
     | 
    
         
             
                    monitor->selector = 0;
         
     | 
| 
       132 
135 
     | 
    
         
             
                    rb_ivar_set(self, rb_intern("selector"), Qnil);
         
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
      
 136 
     | 
    
         
            +
                
         
     | 
| 
       134 
137 
     | 
    
         
             
                    /* Default value is true */
         
     | 
| 
       135 
138 
     | 
    
         
             
                    if(deregister == Qtrue || deregister == Qnil) {
         
     | 
| 
       136 
139 
     | 
    
         
             
                        rb_funcall(selector, rb_intern("deregister"), 1, rb_ivar_get(self, rb_intern("io")));
         
     | 
    
        data/lib/nio/version.rb
    CHANGED
    
    
    
        data/spec/nio/monitor_spec.rb
    CHANGED
    
    | 
         @@ -58,4 +58,12 @@ describe NIO::Monitor do 
     | 
|
| 
       58 
58 
     | 
    
         
             
                expect(subject).to be_closed
         
     | 
| 
       59 
59 
     | 
    
         
             
                expect(selector.registered?(reader)).to be_falsey
         
     | 
| 
       60 
60 
     | 
    
         
             
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              it "closes even if the selector has been shutdown" do
         
     | 
| 
      
 63 
     | 
    
         
            +
                expect(subject).not_to be_closed
         
     | 
| 
      
 64 
     | 
    
         
            +
                selector.close # forces shutdown
         
     | 
| 
      
 65 
     | 
    
         
            +
                expect(subject).not_to be_closed
         
     | 
| 
      
 66 
     | 
    
         
            +
                subject.close
         
     | 
| 
      
 67 
     | 
    
         
            +
                expect(subject).to be_closed
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
       61 
69 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: nio4r
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Tony Arcieri
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-01-11 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rake-compiler
         
     | 
| 
         @@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       128 
128 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       129 
129 
     | 
    
         
             
            requirements: []
         
     | 
| 
       130 
130 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       131 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 131 
     | 
    
         
            +
            rubygems_version: 2.4.5
         
     | 
| 
       132 
132 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       133 
133 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       134 
134 
     | 
    
         
             
            summary: NIO provides a high performance selector API for monitoring IO objects
         
     | 
| 
         @@ -142,3 +142,4 @@ test_files: 
     | 
|
| 
       142 
142 
     | 
    
         
             
            - spec/nio/selector_spec.rb
         
     | 
| 
       143 
143 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       144 
144 
     | 
    
         
             
            - spec/support/selectable_examples.rb
         
     | 
| 
      
 145 
     | 
    
         
            +
            has_rdoc: 
         
     |