summaryrefslogtreecommitdiff
path: root/modules/websocket
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2018-11-26 11:48:31 +0100
committerGitHub <noreply@github.com>2018-11-26 11:48:31 +0100
commit942855a9ee376ce6ee30a25674856ba64316b548 (patch)
treeae8610238dd207185845e871be336ba375615a00 /modules/websocket
parent3e1e508b64df5e8ce8dcb4e2579bac6f1da6c0a3 (diff)
parentc3d3f1dedb84d699751afd74dc2d9a1c79a576ac (diff)
Merge pull request #23961 from Faless/lws_poll_all
Websocket LWS keep servicing till no CB are left
Diffstat (limited to 'modules/websocket')
-rw-r--r--modules/websocket/lws_helper.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/modules/websocket/lws_helper.h b/modules/websocket/lws_helper.h
index fd8f85371b..def4f5cfd0 100644
--- a/modules/websocket/lws_helper.h
+++ b/modules/websocket/lws_helper.h
@@ -60,6 +60,7 @@ void _lws_make_protocols(void *p_obj, lws_callback_function *p_callback, PoolVec
protected: \
struct _LWSRef *_lws_ref; \
struct lws_context *context; \
+ bool _keep_servicing; \
\
static int _lws_gd_callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { \
\
@@ -71,6 +72,7 @@ protected: \
if (!ref->is_valid) \
return 0; \
CNAME *helper = (CNAME *)ref->obj; \
+ helper->_keep_servicing = true; \
return helper->_handle_cb(wsi, reason, user, in, len); \
} \
\
@@ -91,11 +93,14 @@ public: \
\
void _lws_poll() { \
ERR_FAIL_COND(context == NULL); \
- \
- if (::_lws_poll(context, _lws_ref)) { \
- context = NULL; \
- _lws_ref = NULL; \
- } \
+ do { \
+ _keep_servicing = false; \
+ if (::_lws_poll(context, _lws_ref)) { \
+ context = NULL; \
+ _lws_ref = NULL; \
+ break; \
+ } \
+ } while (_keep_servicing); \
} \
\
protected: