Switched httpserver.cpp to use RAII wrapped libevents.

This commit is contained in:
Kalle Alm 2017-01-11 22:50:00 +09:00 committed by Karl-Johan Alm
parent 02d64bd929
commit fd369d267b
No known key found for this signature in database
GPG key ID: 57AF762DB3353322

View file

@ -21,13 +21,13 @@
#include <signal.h> #include <signal.h>
#include <future> #include <future>
#include <event2/event.h>
#include <event2/http.h>
#include <event2/thread.h> #include <event2/thread.h>
#include <event2/buffer.h> #include <event2/buffer.h>
#include <event2/util.h> #include <event2/util.h>
#include <event2/keyvalq_struct.h> #include <event2/keyvalq_struct.h>
#include "support/events.h"
#ifdef EVENT__HAVE_NETINET_IN_H #ifdef EVENT__HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#ifdef _XOPEN_SOURCE_EXTENDED #ifdef _XOPEN_SOURCE_EXTENDED
@ -369,9 +369,6 @@ static void libevent_log_cb(int severity, const char *msg)
bool InitHTTPServer() bool InitHTTPServer()
{ {
struct evhttp* http = 0;
struct event_base* base = 0;
if (!InitHTTPAllowList()) if (!InitHTTPAllowList())
return false; return false;
@ -398,17 +395,13 @@ bool InitHTTPServer()
evthread_use_pthreads(); evthread_use_pthreads();
#endif #endif
base = event_base_new(); // XXX RAII raii_event_base base_ctr = obtain_event_base();
if (!base) {
LogPrintf("Couldn't create an event_base: exiting\n");
return false;
}
/* Create a new evhttp object to handle requests. */ /* Create a new evhttp object to handle requests. */
http = evhttp_new(base); // XXX RAII raii_evhttp http_ctr = obtain_evhttp(base_ctr.get());
struct evhttp* http = http_ctr.get();
if (!http) { if (!http) {
LogPrintf("couldn't create evhttp. Exiting.\n"); LogPrintf("couldn't create evhttp. Exiting.\n");
event_base_free(base);
return false; return false;
} }
@ -419,8 +412,6 @@ bool InitHTTPServer()
if (!HTTPBindAddresses(http)) { if (!HTTPBindAddresses(http)) {
LogPrintf("Unable to bind any endpoint for RPC server\n"); LogPrintf("Unable to bind any endpoint for RPC server\n");
evhttp_free(http);
event_base_free(base);
return false; return false;
} }
@ -429,8 +420,9 @@ bool InitHTTPServer()
LogPrintf("HTTP: creating work queue of depth %d\n", workQueueDepth); LogPrintf("HTTP: creating work queue of depth %d\n", workQueueDepth);
workQueue = new WorkQueue<HTTPClosure>(workQueueDepth); workQueue = new WorkQueue<HTTPClosure>(workQueueDepth);
eventBase = base; // tranfer ownership to eventBase/HTTP via .release()
eventHTTP = http; eventBase = base_ctr.release();
eventHTTP = http_ctr.release();
return true; return true;
} }