1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

improve timeout and ah list comments

Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
Andy Green 2016-02-25 21:39:01 +08:00
parent 73321ccfb0
commit 897197146a
2 changed files with 17 additions and 7 deletions

View file

@ -76,14 +76,17 @@ lws_remove_from_timeout_list(struct lws *wsi)
{
struct lws_context_per_thread *pt = &wsi->context->pt[(int)wsi->tsi];
if (!wsi->timeout_list_prev)
if (!wsi->timeout_list_prev) /* ie, not part of the list */
return;
lws_pt_lock(pt);
/* if we have a next guy, set his prev to our prev */
if (wsi->timeout_list)
wsi->timeout_list->timeout_list_prev = wsi->timeout_list_prev;
/* set our prev guy to our next guy instead of us */
*wsi->timeout_list_prev = wsi->timeout_list;
/* we're out of the list, we should not point anywhere any more */
wsi->timeout_list_prev = NULL;
wsi->timeout_list = NULL;
lws_pt_unlock(pt);
@ -109,11 +112,15 @@ lws_set_timeout(struct lws *wsi, enum pending_timeout reason, int secs)
time(&now);
if (!wsi->pending_timeout && reason) {
if (reason && !wsi->timeout_list_prev) {
/* our next guy is current first guy */
wsi->timeout_list = pt->timeout_list;
/* if there is a next guy, set his prev ptr to our next ptr */
if (wsi->timeout_list)
wsi->timeout_list->timeout_list_prev = &wsi->timeout_list;
/* our prev ptr is first ptr */
wsi->timeout_list_prev = &pt->timeout_list;
/* set the first guy to be us */
*wsi->timeout_list_prev = wsi;
}

View file

@ -107,7 +107,7 @@ lws_header_table_attach(struct lws *wsi)
/* if we are already bound to one, just clear it down */
if (wsi->u.hdr.ah) {
lwsl_err("cleardown\n");
lwsl_info("cleardown\n");
goto reset;
}
@ -122,8 +122,8 @@ lws_header_table_attach(struct lws *wsi)
goto bail;
}
/* new ah.... remove ourselves from waiting list */
*pwsi = wsi->u.hdr.ah_wait_list;
wsi->u.hdr.ah_wait_list = NULL;
*pwsi = wsi->u.hdr.ah_wait_list; /* set our prev to our next */
wsi->u.hdr.ah_wait_list = NULL; /* no next any more */
pt->ah_wait_list_length--;
break;
}
@ -202,7 +202,7 @@ int lws_header_table_detach(struct lws *wsi)
lws_pt_lock(pt);
pwsi = &pt->ah_wait_list;
if (!ah) { /* remove from wait list if that's all */
if (!ah) { /* remove from wait list if none attached */
// if (wsi->socket_is_permanently_unusable)
while (*pwsi) {
if (*pwsi == wsi) {
@ -218,6 +218,7 @@ int lws_header_table_detach(struct lws *wsi)
goto bail;
}
/* we did have an ah attached */
time(&now);
if (now - wsi->u.hdr.ah->assigned > 3) {
/*
@ -239,6 +240,7 @@ int lws_header_table_detach(struct lws *wsi)
wsi->u.hdr.ah = NULL;
ah->wsi = NULL; /* no owner */
/* oh there is nobody on the waiting list... leave it at that then */
if (!*pwsi) {
ah->in_use = 0;
pt->ah_count_in_use--;
@ -246,7 +248,7 @@ int lws_header_table_detach(struct lws *wsi)
goto bail;
}
/* somebody else on same tsi is waiting, give it to him */
/* somebody else on same tsi is waiting, give it to oldest guy */
lwsl_info("pt wait list %p\n", *pwsi);
while ((*pwsi)->u.hdr.ah_wait_list)
@ -271,6 +273,7 @@ int lws_header_table_detach(struct lws *wsi)
/* point prev guy to next guy in list instead */
*pwsi = wsi->u.hdr.ah_wait_list;
/* the guy who got one is out of the list */
wsi->u.hdr.ah_wait_list = NULL;
pt->ah_wait_list_length--;