We use this pattern quite a few times in our own Subversion code (usually using the specially invented SVN_ERR_CEASE_INVOCATION code to document this pattern), so there is not really something wrong with this pattern.
The problem is that the our implementation of the serf library in <= 1.8.x doesn’t handle these errors properly and doesn’t stop the request’s handling when cancelling. So when you start using the serf ra session again the previous request continues, and you usually get the same error again and again. (This is the result of how serf works)
This specific problem is fixed in the ra_serf error handling cleanup that is targeted towards releasing in 1.9.