[Libevent-users] busy waiting on AIX (timercmp bug)

2009-03-09 Thread Richter , Jörg
Hi,

I just have a longish debugging session behind me finding out why a process is 
doing so many poll()s without doing real work.
But this only happens on AIX.

It turns out that the timercmp macro in combination with = operator does not 
work. (used in event.c in libevent-1.4.2-rc2)

This is the definition on AIX:

/*
 * Operations on timevals.
 *
 * Note that timercmp only works for cmp values of !=, , and .
 */
...
#define timercmp(tvp, fvp, cmp) \
((tvp)-tv_sec cmp (fvp)-tv_sec || \
 (tvp)-tv_sec == (fvp)-tv_sec   \
 (tvp)-tv_usec cmp (fvp)-tv_usec)

-

Here the definition of timercmp on Linux:

/* Convenience macros for operations on timevals.
   NOTE: `timercmp' does not work for = or =.  */
...
# define timercmp(a, b, CMP)  \
  (((a)-tv_sec == (b)-tv_sec) ? \
   ((a)-tv_usec CMP (b)-tv_usec) :  \
   ((a)-tv_sec CMP (b)-tv_sec))

Note that the Linux definition has the same comment about the compare operator 
as the AIX one. But the comment seems to predate the Linux definition.

I found no official documentation if timercmp should support = or =.

I would suggest using always the libevent definition of timercmp, without ever 
using the system one.


   Jörg

___
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users


Re: [Libevent-users] busy waiting on AIX (timercmp bug)

2009-03-09 Thread Nick Mathewson
On Mon, Mar 09, 2009 at 01:57:46PM +0100, Richter, J?rg wrote:
 [...]
 Note that the Linux definition has the same comment about the
 compare operator as the AIX one. But the comment seems to predate
 the Linux definition.

I'd guess that the comment is there because, if you're writing a
portable program, you need to make sure that you don't use timercmp
with =/=, even if it _does_ happen to work on Linux.

 [...]
 I found no official documentation if timercmp should support = or =.
 
 I would suggest using always the libevent definition of timercmp,
 without ever using the system one.

That's a good idea!  We already did it back in 1.4.4, which was
released last May.  The latest stable libevent release is 1.4.9.

yrs,
-- 
Nick
___
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users