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; }