--- cvsroot/EV/EV.xs 2007/11/01 11:11:39 1.32 +++ cvsroot/EV/EV.xs 2007/11/01 17:17:32 1.37 @@ -5,12 +5,18 @@ /*#include */ #define TIMEOUT_NONE HUGE_VAL -#define EV_USE_EPOLL 1 #define EV_PROTOTYPES 1 #include "EV/EVAPI.h" #include "libev/ev.c" +#include "libev/event.h" +#include "libev/event.c" + +#define DNS_USE_GETTIMEOFDAY_FOR_ID 1 +#define HAVE_STRUCT_IN6_ADDR 1 +#define HAVE_STRTOK_R 1 +#include "libev/evdns.c" typedef int Signal; @@ -85,6 +91,15 @@ return (void *)w; } +static void * +e_destroy (void *w_) +{ + struct ev_watcher *w = w_; + + SvREFCNT_dec (w->fh ); w->fh = 0; + SvREFCNT_dec (w->cb_sv); w->cb_sv = 0; +} + static SV * e_bless (struct ev_watcher *w, HV *stash) { @@ -149,7 +164,6 @@ } } -#if 0 ///////////////////////////////////////////////////////////////////////////// // DNS @@ -201,7 +215,6 @@ LEAVE; } -#endif #define CHECK_REPEAT(repeat) if (repeat < 0.) \ croak (# repeat " value must be >= 0"); @@ -293,6 +306,8 @@ sv_setiv (sv, (IV)&evapi); SvREADONLY_on (sv); } + + pthread_atfork (ev_fork_prepare, ev_fork_parent, ev_fork_child); } NV ev_now () @@ -438,6 +453,7 @@ void DESTROY (struct ev_io *w) CODE: ev_io_stop (w); + e_destroy (w); void set (struct ev_io *w, SV *fh, int events) CODE: @@ -473,7 +489,7 @@ OUTPUT: RETVAL -short events (struct ev_io *w, short new_events = EV_UNDEF) +int events (struct ev_io *w, int new_events = EV_UNDEF) CODE: { RETVAL = w->events; @@ -500,6 +516,7 @@ void DESTROY (struct ev_signal *w) CODE: ev_signal_stop (w); + e_destroy (w); void set (struct ev_signal *w, SV *signal = 0) CODE: @@ -529,6 +546,7 @@ void DESTROY (struct ev_timer *w) CODE: ev_timer_stop (w); + e_destroy (w); void set (struct ev_timer *w, NV after, NV repeat = 0.) INIT: @@ -552,6 +570,7 @@ void DESTROY (struct ev_periodic *w) CODE: ev_periodic_stop (w); + e_destroy (w); void set (struct ev_periodic *w, NV at, NV interval = 0.) INIT: @@ -573,6 +592,7 @@ void DESTROY (struct ev_idle *w) CODE: ev_idle_stop (w); + e_destroy (w); MODULE = EV PACKAGE = EV::Prepare PREFIX = ev_check_ @@ -583,6 +603,7 @@ void DESTROY (struct ev_prepare *w) CODE: ev_prepare_stop (w); + e_destroy (w); MODULE = EV PACKAGE = EV::Check PREFIX = ev_check_ @@ -593,6 +614,7 @@ void DESTROY (struct ev_check *w) CODE: ev_check_stop (w); + e_destroy (w); MODULE = EV PACKAGE = EV::Child PREFIX = ev_child_ @@ -603,6 +625,7 @@ void DESTROY (struct ev_child *w) CODE: ev_child_stop (w); + e_destroy (w); void set (struct ev_child *w, int pid) CODE: @@ -619,8 +642,6 @@ OUTPUT: RETVAL -#if 0 - MODULE = EV PACKAGE = EV::DNS PREFIX = evdns_ BOOT: @@ -712,6 +733,7 @@ void evdns_search_ndots_set (int ndots) +#if 0 MODULE = EV PACKAGE = EV::HTTP PREFIX = evhttp_