summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pttbbs/daemon/barebone/server.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/pttbbs/daemon/barebone/server.c b/pttbbs/daemon/barebone/server.c
index df347abd..c23ef4d0 100644
--- a/pttbbs/daemon/barebone/server.c
+++ b/pttbbs/daemon/barebone/server.c
@@ -29,6 +29,9 @@
#include <event2/bufferevent.h>
#include <event2/util.h>
#include <event2/listener.h>
+#ifdef SERVER_USE_PTHREADS
+#include <event2/thread.h>
+#endif
#include "server.h"
@@ -78,7 +81,7 @@ setup_client(struct event_base *base, evutil_socket_t fd,
struct sockaddr *address, int socklen)
{
struct bufferevent *bev = bufferevent_socket_new(base, fd,
- BEV_OPT_CLOSE_ON_FREE | BEV_OPT_DEFER_CALLBACKS);
+ BEV_OPT_CLOSE_ON_FREE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_THREADSAFE);
bufferevent_setcb(bev, client_read_cb, NULL, client_event_cb, NULL);
bufferevent_set_timeouts(bev, common_timeout, common_timeout);
bufferevent_enable(bev, EV_READ|EV_WRITE);
@@ -125,9 +128,17 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
+#ifdef SERVER_USE_PTHREADS
+ evthread_use_pthreads();
+#endif
+
base = event_base_new();
assert(base);
+#ifdef SERVER_USE_PTHREADS
+ evthread_make_base_notifiable(base);
+#endif
+
common_timeout = event_base_init_common_timeout(base, &timeout);
if (!inetd) {