summaryrefslogtreecommitdiffstats
path: root/src/uscxml/server
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2017-06-09 09:31:50 (GMT)
committerGitHub <noreply@github.com>2017-06-09 09:31:50 (GMT)
commit4b861a6af4eec8a58d3515e871ccdadd44a182fd (patch)
tree10aa6e3b6e7d6ad5b3b1c5a8f856df44419c47a8 /src/uscxml/server
parent259fc022866eb38e8246fac93a5cb8ae7541ba5a (diff)
parent090016a3f5bcd66d6265fe1504430430f1dee7ed (diff)
downloaduscxml-4b861a6af4eec8a58d3515e871ccdadd44a182fd.zip
uscxml-4b861a6af4eec8a58d3515e871ccdadd44a182fd.tar.gz
uscxml-4b861a6af4eec8a58d3515e871ccdadd44a182fd.tar.bz2
Merge pull request #145 from tklab-tud/sradomski
EVLOOP_NO_EXIT_ON_EMPTY workaround
Diffstat (limited to 'src/uscxml/server')
-rw-r--r--src/uscxml/server/HTTPServer.cpp23
-rw-r--r--src/uscxml/server/HTTPServer.h1
2 files changed, 22 insertions, 2 deletions
diff --git a/src/uscxml/server/HTTPServer.cpp b/src/uscxml/server/HTTPServer.cpp
index 22267dd..faf91d8 100644
--- a/src/uscxml/server/HTTPServer.cpp
+++ b/src/uscxml/server/HTTPServer.cpp
@@ -71,6 +71,15 @@ extern "C" {
namespace uscxml {
+static void dummyCallback(evutil_socket_t fd, short what, void *arg) {
+ // see comments in BasicDelayedEventQueue::run
+ timeval tv;
+ tv.tv_sec = 365 * 24 * 3600;
+ tv.tv_usec = 0;
+ event *ev = *(event **)arg;
+ evtimer_add(ev, &tv);
+}
+
HTTPServer::HTTPServer(unsigned short port, unsigned short wsPort, SSLConfig* sslConf) {
_port = port;
_base = event_base_new();
@@ -79,6 +88,12 @@ HTTPServer::HTTPServer(unsigned short port, unsigned short wsPort, SSLConfig* ss
_thread = NULL;
_httpHandle = NULL;
+ timeval tv;
+ tv.tv_sec = 365 * 24 * 3600;
+ tv.tv_usec = 0;
+ _dummyEvent = evtimer_new(_base, dummyCallback, &_dummyEvent);
+ evtimer_add(_dummyEvent, &tv);
+
#ifdef _WIN32
_wsHandle = NULL;
#else
@@ -738,8 +753,12 @@ void HTTPServer::run(void* instance) {
while(INSTANCE->_isRunning) {
// getting this to be non-polling is somewhat tricky and changes among versions
// event_base_loop(INSTANCE->_base, EVLOOP_ONCE | EVLOOP_NO_EXIT_ON_EMPTY);
- event_base_dispatch(INSTANCE->_base);
- }
+// event_base_dispatch(INSTANCE->_base);
+
+ // BasicDelayedEventQueue::run
+ event_base_loop(INSTANCE->_base, EVLOOP_ONCE);
+
+ }
LOGD(USCXML_INFO) << "HTTP Server stopped" << std::endl;
}
diff --git a/src/uscxml/server/HTTPServer.h b/src/uscxml/server/HTTPServer.h
index 02a2a93..3d7f6b4 100644
--- a/src/uscxml/server/HTTPServer.h
+++ b/src/uscxml/server/HTTPServer.h
@@ -169,6 +169,7 @@ private:
struct event_base* _base;
struct evhttp* _http;
struct evws* _evws;
+ struct event* _dummyEvent;
struct evhttp_bound_socket* _httpHandle;
evutil_socket_t _wsHandle;