diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-11-26 11:48:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-26 11:48:31 +0100 |
commit | 942855a9ee376ce6ee30a25674856ba64316b548 (patch) | |
tree | ae8610238dd207185845e871be336ba375615a00 /modules/websocket | |
parent | 3e1e508b64df5e8ce8dcb4e2579bac6f1da6c0a3 (diff) | |
parent | c3d3f1dedb84d699751afd74dc2d9a1c79a576ac (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.h | 15 |
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: |