]> rtime.felk.cvut.cz Git - sojka/libev.git/commitdiff
*** empty log message ***
authorMarc Alexander Lehmann <libev@schmorp.de>
Wed, 8 Jul 2009 04:29:31 +0000 (04:29 +0000)
committerMarc Alexander Lehmann <libev@schmorp.de>
Wed, 8 Jul 2009 04:29:31 +0000 (04:29 +0000)
Changes
ev.c
ev.h
ev.pod

diff --git a/Changes b/Changes
index 0adecb6890f9ca1566fc9f38bc9b506095a4d3e1..fed3214e024e44a269eeb0ea7119d8f169edc159 100644 (file)
--- a/Changes
+++ b/Changes
@@ -13,6 +13,7 @@ TODO: remain
           slightly higher accuracy.
         - properly declare ev_loop_verify even when !EV_MULTIPLICITY.
         - implement ev_loop_depth.
+        - do not compile in any priority code when EV_MAXPRI == EV_MINPRI.
 
 3.6  Tue Apr 28 02:49:30 CEST 2009
        - multiple timers becoming ready within an event loop iteration
diff --git a/ev.c b/ev.c
index d6c28c770aeacbe2e84af4cb316e7bf1676c68ca..421ef28a4a1565044feb5b97388e21f42a5f9aa5 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -393,8 +393,13 @@ int eventfd (unsigned int initval, int flags);
 # define inline_speed      static inline
 #endif
 
-#define NUMPRI    (EV_MAXPRI - EV_MINPRI + 1)
-#define ABSPRI(w) (((W)w)->priority - EV_MINPRI)
+#define NUMPRI (EV_MAXPRI - EV_MINPRI + 1)
+
+#if EV_MINPRI == EV_MAXPRI
+# define ABSPRI(w) (((W)w), 0)
+#else
+# define ABSPRI(w) (((W)w)->priority - EV_MINPRI)
+#endif
 
 #define EMPTY       /* required for microsofts broken pseudo-c compiler */
 #define EMPTY2(a,b) /* used to suppress some warnings */
@@ -2260,10 +2265,10 @@ ev_clear_pending (EV_P_ void *w)
 inline_size void
 pri_adjust (EV_P_ W w)
 {
-  int pri = w->priority;
+  int pri = ev_priority (w);
   pri = pri < EV_MINPRI ? EV_MINPRI : pri;
   pri = pri > EV_MAXPRI ? EV_MAXPRI : pri;
-  w->priority = pri;
+  ev_set_priority (w, pri);
 }
 
 inline_speed void
diff --git a/ev.h b/ev.h
index 0af57a202dbc8bf7351306fac3b2dc5825038315..52ed6cfb356aac52ef2c2de9e38e6b23e37743d5 100644 (file)
--- a/ev.h
+++ b/ev.h
@@ -189,11 +189,17 @@ struct ev_loop;
  *           or the array index + 1 in the pendings array.
  */
 
+#if EV_MINPRI == EV_MAXPRI
+# define EV_DECL_PRIORITY
+#else
+# define EV_DECL_PRIORITY int priority;
+#endif
+
 /* shared by all watchers */
 #define EV_WATCHER(type)                       \
   int active; /* private */                    \
   int pending; /* private */                   \
-  int priority; /* private */                  \
+  EV_DECL_PRIORITY /* private */               \
   EV_COMMON /* rw */                           \
   EV_CB_DECLARE (type) /* private */
 
@@ -548,9 +554,9 @@ void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revent
 /* these may evaluate ev multiple times, and the other arguments at most once */
 /* either use ev_init + ev_TYPE_set, or the ev_TYPE_init macro, below, to first initialise a watcher */
 #define ev_init(ev,cb_) do {                   \
-  ((ev_watcher *)(void *)(ev))->active   =     \
-  ((ev_watcher *)(void *)(ev))->pending  =     \
-  ((ev_watcher *)(void *)(ev))->priority = 0;  \
+  ((ev_watcher *)(void *)(ev))->active       \
+  ((ev_watcher *)(void *)(ev))->pending = 0;   \
+  ev_set_priority ((ev), 0);                   \
   ev_set_cb ((ev), cb_);                       \
 } while (0)
 
@@ -583,9 +589,15 @@ void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revent
 #define ev_is_pending(ev)                    (0 + ((ev_watcher *)(void *)(ev))->pending) /* ro, true when watcher is waiting for callback invocation */
 #define ev_is_active(ev)                     (0 + ((ev_watcher *)(void *)(ev))->active) /* ro, true when the watcher has been started */
 
-#define ev_priority(ev)                      ((((ev_watcher *)(void *)(ev))->priority) + 0)
 #define ev_cb(ev)                            (ev)->cb /* rw */
-#define ev_set_priority(ev,pri)              ((ev_watcher *)(void *)(ev))->priority = (pri)
+
+#if EV_MINPRI == EV_MAXPRI
+# define ev_priority(ev)                     ((ev), EV_MINPRI)
+# define ev_set_priority(ev,pri)             ((ev), (pri))
+#else
+# define ev_priority(ev)                     ((((ev_watcher *)(void *)(ev))->priority) + 0)
+# define ev_set_priority(ev,pri)             (  (ev_watcher *)(void *)(ev))->priority = (pri)
+#endif
 
 #define ev_periodic_at(ev)                   (((ev_watcher_time *)(ev))->at + 0.)
 
diff --git a/ev.pod b/ev.pod
index e90161f781c7fa9675948ed9965ab4b63a080550..df435cac528564cea8ecf24dfb8acc89694e3f66 100644 (file)
--- a/ev.pod
+++ b/ev.pod
@@ -2035,7 +2035,8 @@ Only the default event loop is capable of handling signals, and therefore
 you can only register child watchers in the default event loop.
 
 Due to some design glitches inside libev, child watchers will always be
-handled at maximum priority (their priority is set to EV_MAXPRI by libev)
+handled at maximum priority (their priority is set to C<EV_MAXPRI> by
+libev)
 
 =head3 Process Interaction