|
|
|
@ -525,6 +525,44 @@ static EV_ATOMIC_T have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work?
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
static unsigned int noinline
|
|
|
|
|
ev_linux_version (void)
|
|
|
|
|
{
|
|
|
|
|
#ifdef __linux
|
|
|
|
|
struct utsname buf;
|
|
|
|
|
unsigned int v;
|
|
|
|
|
int i;
|
|
|
|
|
char *p = buf.release;
|
|
|
|
|
|
|
|
|
|
if (uname (&buf))
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
for (i = 3+1; --i; )
|
|
|
|
|
{
|
|
|
|
|
unsigned int c = 0;
|
|
|
|
|
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
if (*p >= '0' && *p <= '9')
|
|
|
|
|
c = c * 10 + *p++ - '0';
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
p += *p == '.';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
v = (v << 8) | c;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return v;
|
|
|
|
|
#else
|
|
|
|
|
return 0;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
#if EV_AVOID_STDIO
|
|
|
|
|
static void noinline
|
|
|
|
|
ev_printerr (const char *msg)
|
|
|
|
@ -1532,8 +1570,8 @@ ev_embeddable_backends (void)
|
|
|
|
|
int flags = EVBACKEND_EPOLL | EVBACKEND_KQUEUE | EVBACKEND_PORT;
|
|
|
|
|
|
|
|
|
|
/* epoll embeddability broken on all linux versions up to at least 2.6.23 */
|
|
|
|
|
/* please fix it and tell me how to detect the fix */
|
|
|
|
|
flags &= ~EVBACKEND_EPOLL;
|
|
|
|
|
if (ev_linux_version () < 0x020620) /* disable it on linux < 2.6.32 */
|
|
|
|
|
flags &= ~EVBACKEND_EPOLL;
|
|
|
|
|
|
|
|
|
|
return flags;
|
|
|
|
|
}
|
|
|
|
@ -3052,38 +3090,6 @@ infy_cb (EV_P_ ev_io *w, int revents)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline_size unsigned int
|
|
|
|
|
ev_linux_version (void)
|
|
|
|
|
{
|
|
|
|
|
struct utsname buf;
|
|
|
|
|
unsigned int v;
|
|
|
|
|
int i;
|
|
|
|
|
char *p = buf.release;
|
|
|
|
|
|
|
|
|
|
if (uname (&buf))
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
for (i = 3+1; --i; )
|
|
|
|
|
{
|
|
|
|
|
unsigned int c = 0;
|
|
|
|
|
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
if (*p >= '0' && *p <= '9')
|
|
|
|
|
c = c * 10 + *p++ - '0';
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
p += *p == '.';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
v = (v << 8) | c;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return v;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline_size void
|
|
|
|
|
ev_check_2625 (EV_P)
|
|
|
|
|
{
|
|
|
|
|