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