http://subversion.tigris.org/issues/show_bug.cgi?id=4195
------- Additional comments from
philip@tigr... Mon Jun 18 05:01:23 -0700 2012 -------
So this is a serf bug. It could be fixed by moving requeued requests from the
hold_requests list to the requests list, see patch below, or perhaps by having
reset_connection set the state to SERF_CONN_INIT earlier so that requeued
connections get added to the requests list.
Index: outgoing.c
===================================================================
--- outgoing.c (revision 1622)
+++ outgoing.c (working copy)
@@ -445,6 +449,20 @@
*/
if (requeue_requests && !old_reqs->written) {
serf_request_t *req = old_reqs;
+ /* cancel_request may have requeued some requests and
+ * populated hold_requests.
+ */
+ if (conn->hold_requests){
+ if (conn->requests_tail) {
+ conn->requests_tail->next = conn->hold_requests;
+ }
+ else {
+ conn->requests = conn->hold_requests;
+ }
+ conn->requests_tail = conn->hold_requests_tail;
+ conn->hold_requests = NULL;
+ conn->hold_requests_tail = NULL;
+ }
old_reqs = old_reqs->next;
req->next = NULL;
link_requests(&conn->requests, &conn->requests_tail, req);
@@ -454,6 +472,21 @@
}
}
+ /* cancel_request may have requeued some requests and populated
+ * hold_requests.
+ */
+ if (conn->hold_requests) {
+ if (conn->requests_tail) {
+ conn->requests_tail->next = conn->hold_requests;
+ }
+ else {
+ conn->requests = conn->hold_requests;
+ }
+ conn->requests_tail = conn->hold_requests_tail;
+ conn->hold_requests = NULL;
+ conn->hold_requests_tail = NULL;
+ }
+
if (conn->requests_tail) {
conn->requests_tail->next = held_reqs;
}
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=463&dsMessageId=2971831
To unsubscribe from this discussion, e-mail: [
issues-unsubscribe@subv...].
opensubscriber is not affiliated with the authors of this message nor responsible for its content.