diff options
author | Stefan Radomski <github@mintwerk.de> | 2017-06-09 09:31:50 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-09 09:31:50 (GMT) |
commit | 4b861a6af4eec8a58d3515e871ccdadd44a182fd (patch) | |
tree | 10aa6e3b6e7d6ad5b3b1c5a8f856df44419c47a8 /src/uscxml/server | |
parent | 259fc022866eb38e8246fac93a5cb8ae7541ba5a (diff) | |
parent | 090016a3f5bcd66d6265fe1504430430f1dee7ed (diff) | |
download | uscxml-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.cpp | 23 | ||||
-rw-r--r-- | src/uscxml/server/HTTPServer.h | 1 |
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; |