ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.c
(Generate patch)

Comparing libev/ev.c (file contents):
Revision 1.183 by root, Wed Dec 12 05:11:56 2007 UTC vs.
Revision 1.184 by root, Wed Dec 12 05:30:52 2007 UTC

533 { 533 {
534 int fd = fdchanges [i]; 534 int fd = fdchanges [i];
535 ANFD *anfd = anfds + fd; 535 ANFD *anfd = anfds + fd;
536 ev_io *w; 536 ev_io *w;
537 537
538 int events = 0; 538 unsigned char events = 0;
539 539
540 for (w = (ev_io *)anfd->head; w; w = (ev_io *)((WL)w)->next) 540 for (w = (ev_io *)anfd->head; w; w = (ev_io *)((WL)w)->next)
541 events |= w->events; 541 events |= (unsigned char)w->events;
542 542
543#if EV_SELECT_IS_WINSOCKET 543#if EV_SELECT_IS_WINSOCKET
544 if (events) 544 if (events)
545 { 545 {
546 unsigned long argp; 546 unsigned long argp;
547 anfd->handle = _get_osfhandle (fd); 547 anfd->handle = _get_osfhandle (fd);
548 assert (("libev only supports socket fds in this configuration", ioctlsocket (anfd->handle, FIONREAD, &argp) == 0)); 548 assert (("libev only supports socket fds in this configuration", ioctlsocket (anfd->handle, FIONREAD, &argp) == 0));
549 } 549 }
550#endif 550#endif
551 551
552 {
553 unsigned char o_events = anfd->events;
554 unsigned char o_reify = anfd->reify;
555
552 anfd->reify = 0; 556 anfd->reify = 0;
553
554 backend_modify (EV_A_ fd, anfd->events, events);
555 anfd->events = events; 557 anfd->events = events;
558
559 if (o_events != events || o_reify & EV_IOFDSET)
560 backend_modify (EV_A_ fd, o_events, events);
561 }
556 } 562 }
557 563
558 fdchangecnt = 0; 564 fdchangecnt = 0;
559} 565}
560 566
561void inline_size 567void inline_size
562fd_change (EV_P_ int fd, int flags) 568fd_change (EV_P_ int fd, int flags)
563{ 569{
564 unsigned char reify = anfds [fd].reify; 570 unsigned char reify = anfds [fd].reify;
565 anfds [fd].reify |= flags | 1; 571 anfds [fd].reify |= flags;
566 572
567 if (expect_true (!reify)) 573 if (expect_true (!reify))
568 { 574 {
569 ++fdchangecnt; 575 ++fdchangecnt;
570 array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2); 576 array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2);
628 634
629 for (fd = 0; fd < anfdmax; ++fd) 635 for (fd = 0; fd < anfdmax; ++fd)
630 if (anfds [fd].events) 636 if (anfds [fd].events)
631 { 637 {
632 anfds [fd].events = 0; 638 anfds [fd].events = 0;
633 fd_change (EV_A_ fd, EV_IOFDSET); 639 fd_change (EV_A_ fd, EV_IOFDSET | 1);
634 } 640 }
635} 641}
636 642
637/*****************************************************************************/ 643/*****************************************************************************/
638 644
1600 1606
1601 ev_start (EV_A_ (W)w, 1); 1607 ev_start (EV_A_ (W)w, 1);
1602 array_needsize (ANFD, anfds, anfdmax, fd + 1, anfds_init); 1608 array_needsize (ANFD, anfds, anfdmax, fd + 1, anfds_init);
1603 wlist_add (&anfds[fd].head, (WL)w); 1609 wlist_add (&anfds[fd].head, (WL)w);
1604 1610
1605 fd_change (EV_A_ fd, w->events & EV_IOFDSET); 1611 fd_change (EV_A_ fd, w->events & EV_IOFDSET | 1);
1606 w->events &= ~ EV_IOFDSET; 1612 w->events &= ~EV_IOFDSET;
1607} 1613}
1608 1614
1609void noinline 1615void noinline
1610ev_io_stop (EV_P_ ev_io *w) 1616ev_io_stop (EV_P_ ev_io *w)
1611{ 1617{
1616 assert (("ev_io_start called with illegal fd (must stay constant after start!)", w->fd >= 0 && w->fd < anfdmax)); 1622 assert (("ev_io_start called with illegal fd (must stay constant after start!)", w->fd >= 0 && w->fd < anfdmax));
1617 1623
1618 wlist_del (&anfds[w->fd].head, (WL)w); 1624 wlist_del (&anfds[w->fd].head, (WL)w);
1619 ev_stop (EV_A_ (W)w); 1625 ev_stop (EV_A_ (W)w);
1620 1626
1621 fd_change (EV_A_ w->fd, 0); 1627 fd_change (EV_A_ w->fd, 1);
1622} 1628}
1623 1629
1624void noinline 1630void noinline
1625ev_timer_start (EV_P_ ev_timer *w) 1631ev_timer_start (EV_P_ ev_timer *w)
1626{ 1632{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines