mirror of /home/gitosis/repositories/libev.git
remember wether the fd was new or not
parent
a6c1a8b4e8
commit
3c95e518a3
24
ev.c
24
ev.c
|
@ -559,16 +559,17 @@ fd_reify (EV_P)
|
|||
}
|
||||
|
||||
void inline_size
|
||||
fd_change (EV_P_ int fd)
|
||||
fd_change (EV_P_ int fd, int flags)
|
||||
{
|
||||
if (expect_false (anfds [fd].reify))
|
||||
return;
|
||||
unsigned char reify = anfds [fd].reify;
|
||||
anfds [fd].reify |= flags | 1;
|
||||
|
||||
anfds [fd].reify = 1;
|
||||
|
||||
++fdchangecnt;
|
||||
array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2);
|
||||
fdchanges [fdchangecnt - 1] = fd;
|
||||
if (expect_true (!reify))
|
||||
{
|
||||
++fdchangecnt;
|
||||
array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2);
|
||||
fdchanges [fdchangecnt - 1] = fd;
|
||||
}
|
||||
}
|
||||
|
||||
void inline_speed
|
||||
|
@ -629,7 +630,7 @@ fd_rearm_all (EV_P)
|
|||
if (anfds [fd].events)
|
||||
{
|
||||
anfds [fd].events = 0;
|
||||
fd_change (EV_A_ fd);
|
||||
fd_change (EV_A_ fd, EV_IOFDSET);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1601,7 +1602,8 @@ ev_io_start (EV_P_ ev_io *w)
|
|||
array_needsize (ANFD, anfds, anfdmax, fd + 1, anfds_init);
|
||||
wlist_add (&anfds[fd].head, (WL)w);
|
||||
|
||||
fd_change (EV_A_ fd);
|
||||
fd_change (EV_A_ fd, w->events & EV_IOFDSET);
|
||||
w->events &= ~ EV_IOFDSET;
|
||||
}
|
||||
|
||||
void noinline
|
||||
|
@ -1616,7 +1618,7 @@ ev_io_stop (EV_P_ ev_io *w)
|
|||
wlist_del (&anfds[w->fd].head, (WL)w);
|
||||
ev_stop (EV_A_ (W)w);
|
||||
|
||||
fd_change (EV_A_ w->fd);
|
||||
fd_change (EV_A_ w->fd, 0);
|
||||
}
|
||||
|
||||
void noinline
|
||||
|
|
3
ev.h
3
ev.h
|
@ -99,6 +99,7 @@ struct ev_loop;
|
|||
#define EV_NONE 0x00L /* no events */
|
||||
#define EV_READ 0x01L /* ev_io detected read will not block */
|
||||
#define EV_WRITE 0x02L /* ev_io detected write will not block */
|
||||
#define EV_IOFDSET 0x80L /* internal use only */
|
||||
#define EV_TIMEOUT 0x00000100L /* timer timed out */
|
||||
#define EV_PERIODIC 0x00000200L /* periodic timer timed out */
|
||||
#define EV_SIGNAL 0x00000400L /* signal was received */
|
||||
|
@ -432,7 +433,7 @@ void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revent
|
|||
ev_set_cb ((ev), cb_); \
|
||||
} while (0)
|
||||
|
||||
#define ev_io_set(ev,fd_,events_) do { (ev)->fd = (fd_); (ev)->events = (events_); } while (0)
|
||||
#define ev_io_set(ev,fd_,events_) do { (ev)->fd = (fd_); (ev)->events = (events_) | EV_IOFDSET; } while (0)
|
||||
#define ev_timer_set(ev,after_,repeat_) do { (ev)->at = (after_); (ev)->repeat = (repeat_); } while (0)
|
||||
#define ev_periodic_set(ev,ofs_,ival_,res_) do { (ev)->offset = (ofs_); (ev)->interval = (ival_); (ev)->reschedule_cb= (res_); } while (0)
|
||||
#define ev_signal_set(ev,signum_) do { (ev)->signum = (signum_); } while (0)
|
||||
|
|
Loading…
Reference in New Issue