Browse Source

remember wether the fd was new or not

master
Marc Alexander Lehmann 14 years ago
parent
commit
3c95e518a3
2 changed files with 15 additions and 12 deletions
  1. +13
    -11
      ev.c
  2. +2
    -1
      ev.h

+ 13
- 11
ev.c View File

@ -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;
anfds [fd].reify = 1;
unsigned char reify = anfds [fd].reify;
anfds [fd].reify |= flags | 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


+ 2
- 1
ev.h View File

@ -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…
Cancel
Save