Author: rhuijben
Date: Wed Nov 25 01:04:19 2015
New Revision: 1716288

URL: http://svn.apache.org/viewvc?rev=1716288&view=rev
Log:
* outgoing_request.c
  (serf__destroy_request): Resolve two segfaults and fix calculation in
    reprioritize handling.

Modified:
    serf/trunk/outgoing_request.c

Modified: serf/trunk/outgoing_request.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/outgoing_request.c?rev=1716288&r1=1716287&r2=1716288&view=diff
==============================================================================
--- serf/trunk/outgoing_request.c (original)
+++ serf/trunk/outgoing_request.c Wed Nov 25 01:04:19 2015
@@ -104,27 +104,33 @@ apr_status_t serf__destroy_request(serf_
     if (request->depends_first && request->depends_on) {
         apr_uint64_t total = 0;
         serf_request_t *r, **pr;
+        apr_uint64_t rqd = request->dep_priority;
 
         /* Calculate total priority of descendants */
         for (r = request->depends_first; r; r = r->depends_next) {
             total += r->dep_priority;
         }
 
-        if (r->priority)
-            total *= r->priority;
-
         /* Apply now, as if they depend on the parent */
         for (r = request->depends_first; r; r = r->depends_next) {
-            if (r->dep_priority)
-                r->dep_priority = (apr_uint16_t)(total / r->dep_priority);
+            if (total) {
+
+                r->dep_priority = (apr_uint16_t)(rqd * r->dep_priority
+                                                 / total);
+            }
+            else
+                r->dep_priority = 0;
+
             r->depends_on = request->depends_on;
         }
 
         /* Remove us from parent */
         pr = &request->depends_on->depends_first;
         while (*pr) {
-            if (*pr == request)
+            if (*pr == request) {
                 *pr = request->depends_next;
+                continue;
+            }
 
             pr = &(*pr)->depends_next;
         }


Reply via email to