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

Comparing libev/ev.c (file contents):
Revision 1.124 by root, Sat Nov 17 02:26:24 2007 UTC vs.
Revision 1.129 by root, Fri Nov 23 05:00:44 2007 UTC

41# define EV_USE_MONOTONIC 1 41# define EV_USE_MONOTONIC 1
42# endif 42# endif
43# ifndef EV_USE_REALTIME 43# ifndef EV_USE_REALTIME
44# define EV_USE_REALTIME 1 44# define EV_USE_REALTIME 1
45# endif 45# endif
46# else
47# ifndef EV_USE_MONOTONIC
48# define EV_USE_MONOTONIC 0
49# endif
50# ifndef EV_USE_REALTIME
51# define EV_USE_REALTIME 0
52# endif
46# endif 53# endif
47 54
48# if HAVE_SELECT && HAVE_SYS_SELECT_H && !defined (EV_USE_SELECT) 55# ifndef EV_USE_SELECT
56# if HAVE_SELECT && HAVE_SYS_SELECT_H
49# define EV_USE_SELECT 1 57# define EV_USE_SELECT 1
58# else
59# define EV_USE_SELECT 0
60# endif
50# endif 61# endif
51 62
52# if HAVE_POLL && HAVE_POLL_H && !defined (EV_USE_POLL) 63# ifndef EV_USE_POLL
64# if HAVE_POLL && HAVE_POLL_H
53# define EV_USE_POLL 1 65# define EV_USE_POLL 1
66# else
67# define EV_USE_POLL 0
68# endif
54# endif 69# endif
55 70
56# if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H && !defined (EV_USE_EPOLL) 71# ifndef EV_USE_EPOLL
72# if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H
57# define EV_USE_EPOLL 1 73# define EV_USE_EPOLL 1
74# else
75# define EV_USE_EPOLL 0
76# endif
58# endif 77# endif
59 78
79# ifndef EV_USE_KQUEUE
60# if HAVE_KQUEUE && HAVE_SYS_EVENT_H && HAVE_SYS_QUEUE_H && !defined (EV_USE_KQUEUE) 80# if HAVE_KQUEUE && HAVE_SYS_EVENT_H && HAVE_SYS_QUEUE_H
61# define EV_USE_KQUEUE 1 81# define EV_USE_KQUEUE 1
82# else
83# define EV_USE_KQUEUE 0
84# endif
62# endif 85# endif
63 86
64# if HAVE_PORT_H && HAVE_PORT_CREATE && !defined (EV_USE_PORT) 87# ifndef EV_USE_PORT
88# if HAVE_PORT_H && HAVE_PORT_CREATE
65# define EV_USE_PORT 1 89# define EV_USE_PORT 1
90# else
91# define EV_USE_PORT 0
92# endif
66# endif 93# endif
67 94
68#endif 95#endif
69 96
70#include <math.h> 97#include <math.h>
126#ifndef EV_USE_PORT 153#ifndef EV_USE_PORT
127# define EV_USE_PORT 0 154# define EV_USE_PORT 0
128#endif 155#endif
129 156
130/**/ 157/**/
131
132/* darwin simply cannot be helped */
133#ifdef __APPLE__
134# undef EV_USE_POLL
135# undef EV_USE_KQUEUE
136#endif
137 158
138#ifndef CLOCK_MONOTONIC 159#ifndef CLOCK_MONOTONIC
139# undef EV_USE_MONOTONIC 160# undef EV_USE_MONOTONIC
140# define EV_USE_MONOTONIC 0 161# define EV_USE_MONOTONIC 0
141#endif 162#endif
758 || getgid () != getegid (); 779 || getgid () != getegid ();
759#endif 780#endif
760} 781}
761 782
762unsigned int 783unsigned int
763ev_method (EV_P) 784ev_supported_backends (void)
764{ 785{
765 return method; 786}
787
788unsigned int
789ev_recommended_backends (void)
790{
791 unsigned int flags;
792
793 if (EV_USE_PORT ) flags |= EVBACKEND_PORT;
794 if (EV_USE_KQUEUE) flags |= EVBACKEND_KQUEUE;
795 if (EV_USE_EPOLL ) flags |= EVBACKEND_EPOLL;
796 if (EV_USE_POLL ) flags |= EVBACKEND_POLL;
797 if (EV_USE_SELECT) flags |= EVBACKEND_SELECT;
798
799 return flags;
800}
801
802unsigned int
803ev_backend (EV_P)
804{
805 unsigned int flags = ev_recommended_backends ();
806
807#ifndef __NetBSD__
808 /* kqueue is borked on everything but netbsd apparently */
809 /* it usually doesn't work correctly on anything but sockets and pipes */
810 flags &= ~EVBACKEND_KQUEUE;
811#endif
812#ifdef __APPLE__
813 // flags &= ~EVBACKEND_KQUEUE; for documentation
814 flags &= ~EVBACKEND_POLL;
815#endif
816
817 return flags;
766} 818}
767 819
768static void 820static void
769loop_init (EV_P_ unsigned int flags) 821loop_init (EV_P_ unsigned int flags)
770{ 822{
781 ev_rt_now = ev_time (); 833 ev_rt_now = ev_time ();
782 mn_now = get_clock (); 834 mn_now = get_clock ();
783 now_floor = mn_now; 835 now_floor = mn_now;
784 rtmn_diff = ev_rt_now - mn_now; 836 rtmn_diff = ev_rt_now - mn_now;
785 837
786 if (!(flags & EVFLAG_NOENV) && !enable_secure () && getenv ("LIBEV_FLAGS")) 838 if (!(flags & EVFLAG_NOENV)
839 && !enable_secure ()
840 && getenv ("LIBEV_FLAGS"))
787 flags = atoi (getenv ("LIBEV_FLAGS")); 841 flags = atoi (getenv ("LIBEV_FLAGS"));
788 842
789 if (!(flags & 0x0000ffff)) 843 if (!(flags & 0x0000ffffUL))
790 flags |= 0x0000ffff; 844 flags |= ev_recommended_backends ();
791 845
792 method = 0; 846 method = 0;
793#if EV_USE_PORT 847#if EV_USE_PORT
794 if (!method && (flags & EVMETHOD_PORT )) method = port_init (EV_A_ flags); 848 if (!method && (flags & EVBACKEND_PORT )) method = port_init (EV_A_ flags);
795#endif 849#endif
796#if EV_USE_KQUEUE 850#if EV_USE_KQUEUE
797 if (!method && (flags & EVMETHOD_KQUEUE)) method = kqueue_init (EV_A_ flags); 851 if (!method && (flags & EVBACKEND_KQUEUE)) method = kqueue_init (EV_A_ flags);
798#endif 852#endif
799#if EV_USE_EPOLL 853#if EV_USE_EPOLL
800 if (!method && (flags & EVMETHOD_EPOLL )) method = epoll_init (EV_A_ flags); 854 if (!method && (flags & EVBACKEND_EPOLL )) method = epoll_init (EV_A_ flags);
801#endif 855#endif
802#if EV_USE_POLL 856#if EV_USE_POLL
803 if (!method && (flags & EVMETHOD_POLL )) method = poll_init (EV_A_ flags); 857 if (!method && (flags & EVBACKEND_POLL )) method = poll_init (EV_A_ flags);
804#endif 858#endif
805#if EV_USE_SELECT 859#if EV_USE_SELECT
806 if (!method && (flags & EVMETHOD_SELECT)) method = select_init (EV_A_ flags); 860 if (!method && (flags & EVBACKEND_SELECT)) method = select_init (EV_A_ flags);
807#endif 861#endif
808 862
809 ev_init (&sigev, sigcb); 863 ev_init (&sigev, sigcb);
810 ev_set_priority (&sigev, EV_MAXPRI); 864 ev_set_priority (&sigev, EV_MAXPRI);
811 } 865 }
815loop_destroy (EV_P) 869loop_destroy (EV_P)
816{ 870{
817 int i; 871 int i;
818 872
819#if EV_USE_PORT 873#if EV_USE_PORT
820 if (method == EVMETHOD_PORT ) port_destroy (EV_A); 874 if (method == EVBACKEND_PORT ) port_destroy (EV_A);
821#endif 875#endif
822#if EV_USE_KQUEUE 876#if EV_USE_KQUEUE
823 if (method == EVMETHOD_KQUEUE) kqueue_destroy (EV_A); 877 if (method == EVBACKEND_KQUEUE) kqueue_destroy (EV_A);
824#endif 878#endif
825#if EV_USE_EPOLL 879#if EV_USE_EPOLL
826 if (method == EVMETHOD_EPOLL ) epoll_destroy (EV_A); 880 if (method == EVBACKEND_EPOLL ) epoll_destroy (EV_A);
827#endif 881#endif
828#if EV_USE_POLL 882#if EV_USE_POLL
829 if (method == EVMETHOD_POLL ) poll_destroy (EV_A); 883 if (method == EVBACKEND_POLL ) poll_destroy (EV_A);
830#endif 884#endif
831#if EV_USE_SELECT 885#if EV_USE_SELECT
832 if (method == EVMETHOD_SELECT) select_destroy (EV_A); 886 if (method == EVBACKEND_SELECT) select_destroy (EV_A);
833#endif 887#endif
834 888
835 for (i = NUMPRI; i--; ) 889 for (i = NUMPRI; i--; )
836 array_free (pending, [i]); 890 array_free (pending, [i]);
837 891
850 904
851static void 905static void
852loop_fork (EV_P) 906loop_fork (EV_P)
853{ 907{
854#if EV_USE_PORT 908#if EV_USE_PORT
855 if (method == EVMETHOD_PORT ) port_fork (EV_A); 909 if (method == EVBACKEND_PORT ) port_fork (EV_A);
856#endif 910#endif
857#if EV_USE_KQUEUE 911#if EV_USE_KQUEUE
858 if (method == EVMETHOD_KQUEUE) kqueue_fork (EV_A); 912 if (method == EVBACKEND_KQUEUE) kqueue_fork (EV_A);
859#endif 913#endif
860#if EV_USE_EPOLL 914#if EV_USE_EPOLL
861 if (method == EVMETHOD_EPOLL ) epoll_fork (EV_A); 915 if (method == EVBACKEND_EPOLL ) epoll_fork (EV_A);
862#endif 916#endif
863 917
864 if (ev_is_active (&sigev)) 918 if (ev_is_active (&sigev))
865 { 919 {
866 /* default loop */ 920 /* default loop */
910 964
911#endif 965#endif
912 966
913#if EV_MULTIPLICITY 967#if EV_MULTIPLICITY
914struct ev_loop * 968struct ev_loop *
915ev_default_loop_ (unsigned int flags) 969ev_default_loop_init (unsigned int flags)
916#else 970#else
917int 971int
918ev_default_loop (unsigned int flags) 972ev_default_loop (unsigned int flags)
919#endif 973#endif
920{ 974{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines