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

Comparing libev/ev.c (file contents):
Revision 1.78 by root, Thu Nov 8 21:08:56 2007 UTC vs.
Revision 1.80 by root, Fri Nov 9 15:30:59 2007 UTC

215 int events; 215 int events;
216} ANPENDING; 216} ANPENDING;
217 217
218#if EV_MULTIPLICITY 218#if EV_MULTIPLICITY
219 219
220struct ev_loop 220 struct ev_loop
221{ 221 {
222# define VAR(name,decl) decl; 222 #define VAR(name,decl) decl;
223# include "ev_vars.h" 223 #include "ev_vars.h"
224};
225# undef VAR 224 #undef VAR
225 };
226# include "ev_wrap.h" 226 #include "ev_wrap.h"
227
228 struct ev_loop default_loop_struct;
229 static struct ev_loop *default_loop;
227 230
228#else 231#else
229 232
230# define VAR(name,decl) static decl; 233 #define VAR(name,decl) static decl;
231# include "ev_vars.h" 234 #include "ev_vars.h"
232# undef VAR 235 #undef VAR
236
237 static int default_loop;
233 238
234#endif 239#endif
235 240
236/*****************************************************************************/ 241/*****************************************************************************/
237 242
342 347
343 for (i = 0; i < eventcnt; ++i) 348 for (i = 0; i < eventcnt; ++i)
344 ev_feed_event (EV_A_ events [i], type); 349 ev_feed_event (EV_A_ events [i], type);
345} 350}
346 351
347static void 352inline void
348fd_event (EV_P_ int fd, int events) 353fd_event (EV_P_ int fd, int revents)
349{ 354{
350 ANFD *anfd = anfds + fd; 355 ANFD *anfd = anfds + fd;
351 struct ev_io *w; 356 struct ev_io *w;
352 357
353 for (w = (struct ev_io *)anfd->head; w; w = (struct ev_io *)((WL)w)->next) 358 for (w = (struct ev_io *)anfd->head; w; w = (struct ev_io *)((WL)w)->next)
354 { 359 {
355 int ev = w->events & events; 360 int ev = w->events & revents;
356 361
357 if (ev) 362 if (ev)
358 ev_feed_event (EV_A_ (W)w, ev); 363 ev_feed_event (EV_A_ (W)w, ev);
359 } 364 }
365}
366
367void
368ev_feed_fd_event (EV_P_ int fd, int revents)
369{
370 fd_event (EV_A_ fd, revents);
360} 371}
361 372
362/*****************************************************************************/ 373/*****************************************************************************/
363 374
364static void 375static void
552#endif 563#endif
553 errno = old_errno; 564 errno = old_errno;
554 } 565 }
555} 566}
556 567
568void
569ev_feed_signal_event (EV_P_ int signum)
570{
571 WL w;
572
573#if EV_MULTIPLICITY
574 assert (("feeding signal events is only supported in the default loop", loop == default_loop));
575#endif
576
577 --signum;
578
579 if (signum < 0 || signum >= signalmax)
580 return;
581
582 signals [signum].gotsig = 0;
583
584 for (w = signals [signum].head; w; w = w->next)
585 ev_feed_event (EV_A_ (W)w, EV_SIGNAL);
586}
587
557static void 588static void
558sigcb (EV_P_ struct ev_io *iow, int revents) 589sigcb (EV_P_ struct ev_io *iow, int revents)
559{ 590{
560 WL w;
561 int signum; 591 int signum;
562 592
563#ifdef WIN32 593#ifdef WIN32
564 recv (sigpipe [0], &revents, 1, MSG_DONTWAIT); 594 recv (sigpipe [0], &revents, 1, MSG_DONTWAIT);
565#else 595#else
567#endif 597#endif
568 gotsig = 0; 598 gotsig = 0;
569 599
570 for (signum = signalmax; signum--; ) 600 for (signum = signalmax; signum--; )
571 if (signals [signum].gotsig) 601 if (signals [signum].gotsig)
572 { 602 ev_feed_signal_event (EV_A_ signum + 1);
573 signals [signum].gotsig = 0;
574
575 for (w = signals [signum].head; w; w = w->next)
576 ev_feed_event (EV_A_ (W)w, EV_SIGNAL);
577 }
578} 603}
579 604
580static void 605static void
581siginit (EV_P) 606siginit (EV_P)
582{ 607{
822} 847}
823 848
824#endif 849#endif
825 850
826#if EV_MULTIPLICITY 851#if EV_MULTIPLICITY
827struct ev_loop default_loop_struct;
828static struct ev_loop *default_loop;
829
830struct ev_loop * 852struct ev_loop *
831#else 853#else
832static int default_loop;
833
834int 854int
835#endif 855#endif
836ev_default_loop (int methods) 856ev_default_loop (int methods)
837{ 857{
838 if (sigpipe [0] == sigpipe [1]) 858 if (sigpipe [0] == sigpipe [1])

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines