improve timeout and ah list comments
authorAndy Green <andy.green@linaro.org>
Thu, 25 Feb 2016 13:54:31 +0000 (21:54 +0800)
committerAndy Green <andy.green@linaro.org>
Thu, 25 Feb 2016 13:54:31 +0000 (21:54 +0800)
Signed-off-by: Andy Green <andy.green@linaro.org>
lib/libwebsockets.c
lib/parsers.c

index b4bac9f..a564520 100644 (file)
@@ -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;
        }
 
index 2547ec9..af4c129 100644 (file)
@@ -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--;