Greg Hudson <ghudson@MIT.EDU> writes:
> On Wed, 2003-03-26 at 20:21, Philip Martin wrote:
> > "Network connection closed unexpectedly"
>
> There are known places in ra_svn where an error will cause the svnserve
> process to terminate rather than presenting an error to the client. The
> most tricky of these to fix is in the interface between the reporter and
> editor, since you don't know what state the protocol is in when you get
> an error back from a finish-report function.
>
> However, commits do not involve the reporter, nor are they one of the
> few other places where errors aren't reported right. From looking at
> the code, I don't see what kind of error would not be properly reported
> to the client. So I think some debugging is in order. (Unfortunately,
> I am very thin on time right now; things should ease up in a few
> months.)
The problem occurs when a second commit starts while the first commit
is in progress, and both commits modify the same file. This causes
svn_repos_fs_commit_txn to return SVN_ERR_FS_CONFLICT, which
propagates to svn_ra_svn_handle_commands where it gets written using
svn_ra_svn_write_cmd_failure. So far so good.
Now the commit function in svnserve/serve.c calls the function
svn_ra_svn_drive_editor with pass_through set FALSE so the
SVN_ERR_FS_CONFLICT error does not get returned. The commit function
therefore goes on to call svn_ra_svn_write_tuple with unitialized
new_rev, date, and author which causes svnserve to dump core.
This core dump happens before svn_ra_svn_flush gets a chance to flush
the SVN_ERR_FS_CONFLICT error to the client. This is what causes the
client to report the network connection as closed.
--
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Mar 27 14:02:13 2003