]> git.llucax.com Git - software/eventxx.git/blobdiff - event
Prevents a bug in libevent event_base_free().
[software/eventxx.git] / event
diff --git a/event b/event
index b1272dc77a9fc1739d6b6a7faab729c2db40e744..d2ec386484d3ab130891390c1f84b63404814129 100644 (file)
--- a/event
+++ b/event
@@ -292,7 +292,7 @@ struct event: basic_event
        event(int fd, short ev, F& handler, int priority = DEFAULT_PRIORITY)
                throw(invalid_priority)
        {
-               event_set(this, fd, ev, &wrapper, &handler);
+               event_set(this, fd, ev, &wrapper, reinterpret_cast< void* >(&handler));
                if (priority != DEFAULT_PRIORITY
                                && event_priority_set(this, priority))
                        throw invalid_priority();
@@ -302,7 +302,7 @@ struct event: basic_event
                event() {}
                static void wrapper(int fd, short ev, void* h)
                {
-                       F& handler = *static_cast< F* >(h);
+                       F& handler = *reinterpret_cast< F* >(h);
                        handler(fd, ev);
                }
 
@@ -365,7 +365,8 @@ struct timer: event< F >
        timer(F& handler, int priority = DEFAULT_PRIORITY)
                throw(invalid_priority)
        {
-               evtimer_set(this, &event< F >::wrapper, &handler);
+               evtimer_set(this, &event< F >::wrapper,
+                       reinterpret_cast< void* >(&handler));
                if (priority != DEFAULT_PRIORITY
                                && event_priority_set(this, priority))
                        throw invalid_priority();
@@ -427,7 +428,8 @@ struct signal: event< F >
        signal(int signum, F& handler, int priority = DEFAULT_PRIORITY)
                throw(invalid_priority)
        {
-               signal_set(this, signum, &event< F >::wrapper, &handler);
+               signal_set(this, signum, &event< F >::wrapper,
+                       reinterpret_cast< void* >(&handler));
                if (priority != DEFAULT_PRIORITY
                                && event_priority_set(this, priority))
                        throw invalid_priority();
@@ -522,7 +524,9 @@ struct dispatcher
                internal::event_base_priority_init(_event_base, npriorities);
        }
 
+#ifdef EVENT_BASE_FREE_FIX
        ~dispatcher() throw() { event_base_free(_event_base); }
+#endif
 
        /**
         * Adds an event to the dispatcher.
@@ -563,7 +567,8 @@ struct dispatcher
        template < typename F >
        void add_once(int fd, short ev, F& handler)
        {
-               internal::event_once(fd, ev, &dispatcher::wrapper< F >, &handler, 0);
+               internal::event_once(fd, ev, &dispatcher::wrapper< F >,
+                               reinterpret_cast< void* >(&handler), 0);
        }
 
        /**
@@ -596,7 +601,9 @@ struct dispatcher
        template < typename F >
        void add_once(int fd, short ev, F& handler, const time& to)
        {
-               internal::event_once(fd, ev, &dispatcher::wrapper< F >, &handler, const_cast< time* >(&to)); // XXX HACK libevent don't use const
+               internal::event_once(fd, ev, &dispatcher::wrapper< F >,
+                               reinterpret_cast< void* >(&handler),
+                               const_cast< time* >(&to)); // XXX HACK libevent don't use const
        }
 
        /**
@@ -628,7 +635,9 @@ struct dispatcher
        template < typename F >
        void add_once_timer(F& handler, const time& to)
        {
-               internal::event_once(-1, EV_TIMEOUT, &dispatcher::wrapper< F >, &handler, const_cast< time* >(&to)); // XXX HACK libevent don't use const
+               internal::event_once(-1, EV_TIMEOUT, &dispatcher::wrapper< F >,
+                               reinterpret_cast< void* >(&handler),
+                               const_cast< time* >(&to)); // XXX HACK libevent don't use const
        }
 
        /**
@@ -694,7 +703,7 @@ struct dispatcher
                template < typename F >
                static void wrapper(int fd, short ev, void* h)
                {
-                       F& handler = *static_cast< F* >(h);
+                       F& handler = *reinterpret_cast< F* >(h);
                        handler(fd, ev);
                }