A few people have reported svn+ra_serf aborting when starting a merge operation.
I can reproduce this issue, but only from time to time. Typically I can
reproduce it once, and then I have to restart my machine to reproduce it again.
The issue happens when certain requests to the server fail and have to be
resent. Wwhat's happening is that ra_serf creates a bucket with the request
body, but that body is eaten and destroyed by the first request. So when the
request is sent a second time, typically the memory is not cleared yet so the
request will succeed, but on destroying that body for the 2nd time, serf will abort.
This is explained in more detail:
The correct way of working is simple: instead of giving serf a bucket with the
request body, provide it with a callback that can create the bucket on demand,
twice if needed. We already do this for most of the request types, but not for
all. I could find 8 places where the body_buckets variable is still set. All
these places need to be converted to use body_delegate.
For REPORTs this is a bit difficult, as these are created when driving an
editor, which we don't want to drive a second time.
One of the workarounds is to store the data from the REPORT request on disk too,
and reload it if needed. Another workaround would be to teach the bucket code to
not destroy the bucket data until we explicitly told serf to do so.
Let's use this bug for the cleanup of those 8 'body_buckets locations'.