improve timeout and ah list comments
Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
parent
d19dec7922
commit
12369b0c91
2 changed files with 17 additions and 7 deletions
|
@ -71,14 +71,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);
|
||||
|
@ -104,11 +107,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;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,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;
|
||||
}
|
||||
|
||||
|
@ -112,8 +112,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;
|
||||
}
|
||||
|
@ -189,7 +189,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) {
|
||||
|
@ -205,6 +205,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) {
|
||||
/*
|
||||
|
@ -226,6 +227,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--;
|
||||
|
@ -233,7 +235,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)
|
||||
|
@ -258,6 +260,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--;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue