#ifdef EVENT_BASE_FREE_FIX
~dispatcher() throw() { event_base_free(_event_base); }
+#else
+#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 and really free the dispatcher memory using event_base_free()."
#endif
/**
#include <eventxx>
#include <iostream>
+#include <map>
#include <csignal>
using eventxx::dispatcher;
{
dispatcher& d;
int fds[4];
+ std::map< int, eventxx::basic_event* > events;
handler(dispatcher& d): d(d)
{
OSASSERT(pipe, fds);
OSASSERT(pipe, fds+2);
}
- void operator() (int fd, short event)
+ void add(eventxx::basic_event& e)
+ {
+ events[e.fd()] = &e;
+ }
+ void operator() (int fd, eventxx::type event)
{
char buf[7];
OSASSERT(read, fd, buf, 7);
std::cout << "Read from fd " << fd << ": " << buf << "\n";
- d.exit();
+ d.del(*events[fd]);
}
};
handler h(d);
OSASSERT(write, h.fds[1], "hola 1", 7);
OSASSERT(write, h.fds[3], "hola 2", 7);
- eventxx::event< handler > e1(h.fds[0], EV_READ, h);
- eventxx::event< handler > e2(h.fds[2], EV_READ, h);
+ eventxx::event< handler > e1(h.fds[0], eventxx::READ, h);
+ eventxx::event< handler > e2(h.fds[2], eventxx::READ, h);
+ h.add(e1);
+ h.add(e2);
d.add(e1, 1);
d.add(e2, 0);
d.dispatch();