Skip to content

Commit

Permalink
adjust_timeout: with default lws_plat_service_tsi allow beings passed…
Browse files Browse the repository at this point in the history
… 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.
  • Loading branch information
lws-team committed Oct 10, 2016
1 parent 0733610 commit 202e8a7
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
11 changes: 4 additions & 7 deletions lib/lws-plat-unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
13 changes: 11 additions & 2 deletions lib/lws-plat-win.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 202e8a7

Please sign in to comment.