adjust_timeout: with default lws_plat_service_tsi allow beings passed 0 timeout
Some people are calling service with zero timeout, taking care of not busywaiting by some other external arrangements. Adapt the forced service signalling to survive this.
This commit is contained in:
parent
e2fcb94147
commit
5fb327754a
2 changed files with 15 additions and 9 deletions
|
@ -130,19 +130,16 @@ lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
|
|||
}
|
||||
context->service_tid = context->service_tid_detected;
|
||||
|
||||
timeout_ms = lws_service_adjust_timeout(context, timeout_ms, tsi);
|
||||
/*
|
||||
* is there anybody with pending stuff that needs service forcing?
|
||||
*/
|
||||
if (!timeout_ms) {
|
||||
if (!lws_service_adjust_timeout(context, 1, tsi)) {
|
||||
/* -1 timeout means just do forced service */
|
||||
lws_plat_service_tsi(context, -1, pt->tid);
|
||||
/* still somebody left who wants forced service? */
|
||||
if (!lws_service_adjust_timeout(context, 1, pt->tid)) {
|
||||
/* yes... come back again later */
|
||||
//lwsl_debug("%s: done again\n", __func__);
|
||||
}
|
||||
return 0;
|
||||
if (!lws_service_adjust_timeout(context, 1, pt->tid))
|
||||
/* yes... come back again quickly */
|
||||
timeout_ms = 0;
|
||||
}
|
||||
|
||||
n = poll(pt->fds, pt->fds_count, timeout_ms);
|
||||
|
|
|
@ -212,8 +212,17 @@ lws_plat_service_tsi(struct lws_context *context, int timeout_ms, int tsi)
|
|||
i--;
|
||||
}
|
||||
|
||||
/* if we know something needs service already, don't wait in poll */
|
||||
timeout_ms = lws_service_adjust_timeout(context, timeout_ms, tsi);
|
||||
/*
|
||||
* is there anybody with pending stuff that needs service forcing?
|
||||
*/
|
||||
if (!lws_service_adjust_timeout(context, 1, tsi)) {
|
||||
/* -1 timeout means just do forced service */
|
||||
lws_plat_service_tsi(context, -1, pt->tid);
|
||||
/* still somebody left who wants forced service? */
|
||||
if (!lws_service_adjust_timeout(context, 1, pt->tid))
|
||||
/* yes... come back again quickly */
|
||||
timeout_ms = 0;
|
||||
}
|
||||
|
||||
ev = WSAWaitForMultipleEvents( 1, pt->events , FALSE, timeout_ms, FALSE);
|
||||
if (ev == WSA_WAIT_EVENT_0) {
|
||||
|
|
Loading…
Add table
Reference in a new issue