mirror of /home/gitosis/repositories/libev.git
*** empty log message ***
This commit is contained in:
parent
935201dbdb
commit
7d05e6abb7
6
Changes
6
Changes
|
@ -1,10 +1,12 @@
|
|||
Revision history for libev, a high-performance and full-featured event loop.
|
||||
|
||||
- pass in the write fd set as except fd set under windows. windows
|
||||
is so uncontrollably lame that it requires this.
|
||||
is so uncontrollably lame that it requires this. this means that
|
||||
switching off oobinline is not supported (but tcp/ip doesn't
|
||||
have oob, so that would be stupid anyways.
|
||||
|
||||
3.41 Fri May 23 18:42:54 CEST 2008
|
||||
- work around an (undocumented) bug in winsocket select: if you
|
||||
- work around an obscure bug in winsocket select: if you
|
||||
provide only empty fd sets then select returns WSAEINVAL. how sucky.
|
||||
- improve timer scheduling stability and reduce use of time_epsilon.
|
||||
- use 1-based 2-heap for EV_MINIMAL, simplifies code, reduces
|
||||
|
|
33
ev_select.c
33
ev_select.c
|
@ -100,6 +100,9 @@ select_modify (EV_P_ int fd, int oev, int nev)
|
|||
vec_ro = ev_realloc (vec_ro, new_max * NFDBYTES); /* could free/malloc */
|
||||
vec_wi = ev_realloc (vec_wi, new_max * NFDBYTES);
|
||||
vec_wo = ev_realloc (vec_wo, new_max * NFDBYTES); /* could free/malloc */
|
||||
#ifdef _WIN32
|
||||
vec_eo = ev_realloc (vec_eo, new_max * NFDBYTES); /* could free/malloc */
|
||||
#endif
|
||||
|
||||
for (; vec_max < new_max; ++vec_max)
|
||||
((fd_mask *)vec_ri) [vec_max] =
|
||||
|
@ -122,25 +125,28 @@ select_poll (EV_P_ ev_tstamp timeout)
|
|||
{
|
||||
struct timeval tv;
|
||||
int res;
|
||||
|
||||
#if EV_SELECT_USE_FD_SET
|
||||
memcpy (vec_ro, vec_ri, sizeof (fd_set));
|
||||
memcpy (vec_wo, vec_wi, sizeof (fd_set));
|
||||
#else
|
||||
memcpy (vec_ro, vec_ri, vec_max * NFDBYTES);
|
||||
memcpy (vec_wo, vec_wi, vec_max * NFDBYTES);
|
||||
#endif
|
||||
int fd_setsize;
|
||||
|
||||
tv.tv_sec = (long)timeout;
|
||||
tv.tv_usec = (long)((timeout - (ev_tstamp)tv.tv_sec) * 1e6);
|
||||
|
||||
#if EV_SELECT_USE_FD_SET
|
||||
fd_setsize = sizeof (fd_set);
|
||||
#else
|
||||
fd_setsize = vec_max * NFDBYTES;
|
||||
#endif
|
||||
|
||||
memcpy (vec_ro, vec_ri, fd_setsize);
|
||||
memcpy (vec_wo, vec_wi, fd_setsize);
|
||||
|
||||
#ifdef _WIN32
|
||||
/* pass in the write set as except set.
|
||||
* the idea behind this is to work around a windows bug that causes
|
||||
* errors to be reported as an exception and not by setting
|
||||
* the writable bit. this is so uncontrollably lame.
|
||||
*/
|
||||
res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, (fd_set *)vec_wo, &tv);
|
||||
memcpy (vec_eo, vec_wi, fd_setsize);
|
||||
res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, (fd_set *)vec_eo, &tv);
|
||||
#else
|
||||
res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, 0, &tv);
|
||||
#endif
|
||||
|
@ -201,6 +207,9 @@ select_poll (EV_P_ ev_tstamp timeout)
|
|||
|
||||
if (FD_ISSET (handle, (fd_set *)vec_ro)) events |= EV_READ;
|
||||
if (FD_ISSET (handle, (fd_set *)vec_wo)) events |= EV_WRITE;
|
||||
#ifdef _WIN32
|
||||
if (FD_ISSET (handle, (fd_set *)vec_eo)) events |= EV_WRITE;
|
||||
#endif
|
||||
|
||||
if (expect_true (events))
|
||||
fd_event (EV_A_ fd, events);
|
||||
|
@ -215,6 +224,9 @@ select_poll (EV_P_ ev_tstamp timeout)
|
|||
{
|
||||
fd_mask word_r = ((fd_mask *)vec_ro) [word];
|
||||
fd_mask word_w = ((fd_mask *)vec_wo) [word];
|
||||
#ifdef _WIN32
|
||||
word_w |= ((fd_mask *)vec_eo) [word];
|
||||
#endif
|
||||
|
||||
if (word_r || word_w)
|
||||
for (bit = NFDBITS; bit--; )
|
||||
|
@ -247,6 +259,9 @@ select_init (EV_P_ int flags)
|
|||
vec_ro = ev_malloc (sizeof (fd_set));
|
||||
vec_wi = ev_malloc (sizeof (fd_set)); FD_ZERO ((fd_set *)vec_wi);
|
||||
vec_wo = ev_malloc (sizeof (fd_set));
|
||||
#ifdef _WIN32
|
||||
vec_eo = ev_malloc (sizeof (fd_set));
|
||||
#endif
|
||||
#else
|
||||
vec_max = 0;
|
||||
vec_ri = 0;
|
||||
|
|
|
@ -72,6 +72,9 @@ VARx(void *, vec_ri)
|
|||
VARx(void *, vec_ro)
|
||||
VARx(void *, vec_wi)
|
||||
VARx(void *, vec_wo)
|
||||
#if defined(_WIN32) || EV_GENWRAP
|
||||
VARx(void *, vec_eo)
|
||||
#endif
|
||||
VARx(int, vec_max)
|
||||
#endif
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#define vec_ro ((loop)->vec_ro)
|
||||
#define vec_wi ((loop)->vec_wi)
|
||||
#define vec_wo ((loop)->vec_wo)
|
||||
#define vec_eo ((loop)->vec_eo)
|
||||
#define vec_max ((loop)->vec_max)
|
||||
#define polls ((loop)->polls)
|
||||
#define pollmax ((loop)->pollmax)
|
||||
|
@ -94,6 +95,7 @@
|
|||
#undef vec_ro
|
||||
#undef vec_wi
|
||||
#undef vec_wo
|
||||
#undef vec_eo
|
||||
#undef vec_max
|
||||
#undef polls
|
||||
#undef pollmax
|
||||
|
|
Loading…
Reference in New Issue