]> git.llucax.com Git - software/eventxx.git/blobdiff - eventxx
Add EVENTXX_NO_WARNING to avoid even_base_free() memory leak warning.
[software/eventxx.git] / eventxx
diff --git a/eventxx b/eventxx
index d599f6472f7350322042e7845845aa845f7f3757..2ee228dc3221a090f946de0796565c2badcecfcb 100644 (file)
--- a/eventxx
+++ b/eventxx
  * patch your libevent (for example, using this <a
  * href="http://monkeymail.org/archives/libevent-users/2006-April/000141.html">patch</a>
  * written by Mark D. Anderson, and who knows why it's not still applied). If
- * you do so, you can compile your programs with @c -DEVENT_BASE_FREE_FIX so
- * @c event_base_free() gets called in the eventxx::dispatcher @link
+ * you do so, you can compile your programs with @c -DEVENTXX_EVENT_BASE_FREE_FIX
+ * so @c event_base_free() gets called in the eventxx::dispatcher @link
  * eventxx::dispatcher::~dispatcher() destructor @endlink.
  *
  * That said, I think it's still pretty usable anyways. If something is broken
  *
  * @author Leandro Lucarella <llucax+eventxx@gmail.com>
  *
- * @version 0.2
+ * @version 0.4
  *
  * @par License
  * This program is under the BOLA license (see
@@ -414,9 +414,10 @@ enum type
        PERSIST = EV_PERSIST  ///< Not really an event, is an event modifier.
 };
 
+inline
 type operator| (const type& t1, const type& t2)
 {
-       int r = t1 | t2;
+       int r = static_cast< int >(t1) | static_cast< int >(t2);
        return *reinterpret_cast< type* >(&r);
 }
 
@@ -790,15 +791,17 @@ struct dispatcher
                internal::event_base_priority_init(_event_base, npriorities);
        }
 
-#ifdef EVENT_BASE_FREE_FIX
+#ifdef EVENTXX_BASE_FREE_FIX
        /// Free dispatcher resources, see @ref Status section for details.
        ~dispatcher() throw() { event_base_free(_event_base); }
 #else
+#ifndef EVENTXX_NO_WARNING
 #warning "The dispatcher class *will* leak memory because of a libevent bug, " \
     "see http://www.mail-archive.com/libevent-users@monkey.org/msg00110.html " \
     "for more info an a patch. If you already have this patch, please " \
-    "-DEVENT_BASE_FREE_FIX to your compiler to make this message disappear " \
+    "-DEVENTXX_EVENT_BASE_FREE_FIX to your compiler to make this message disappear " \
     "and really free the dispatcher memory using event_base_free()."
+#endif
 #endif
 
        /**
@@ -1007,7 +1010,7 @@ struct dispatcher
        protected:
                internal::event_base* _event_base;
                template < typename F >
-               static void wrapper(int fd, type ev, void* h)
+               static void wrapper(int fd, short ev, void* h)
                {
                        F& handler = *reinterpret_cast< F* >(h);
                        handler(fd, *reinterpret_cast< type* >(&ev));