You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2011/07/24 04:18:26 UTC
svn commit: r1150254 - /subversion/trunk/subversion/libsvn_wc/adm_crawler.c
Author: rhuijben
Date: Sun Jul 24 02:18:25 2011
New Revision: 1150254
URL: http://svn.apache.org/viewvc?rev=1150254&view=rev
Log:
* subversion/libsvn_wc/adm_crawler.c
(svn_wc__internal_transmit_text_deltas): Compose errors instead of dropping
them. This also makes us close some file handles explicitly that would
be left open in specific error codepaths.
Modified:
subversion/trunk/subversion/libsvn_wc/adm_crawler.c
Modified: subversion/trunk/subversion/libsvn_wc/adm_crawler.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_crawler.c?rev=1150254&r1=1150253&r2=1150254&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_crawler.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_crawler.c Sun Jul 24 02:18:25 2011
@@ -1112,21 +1112,12 @@ svn_wc__internal_transmit_text_deltas(co
NULL, NULL,
scratch_pool, scratch_pool);
- /* Close the two streams to force writing the digest,
- if we already have an error, ignore this one. */
- if (err)
- {
- svn_error_clear(svn_stream_close(base_stream));
- svn_error_clear(svn_stream_close(local_stream));
- }
- else
- {
- SVN_ERR(svn_stream_close(base_stream));
- SVN_ERR(svn_stream_close(local_stream));
- }
+ /* Close the two streams to force writing the digest */
+ err = svn_error_compose_create(err, svn_stream_close(base_stream));
+ err = svn_error_compose_create(err, svn_stream_close(local_stream));
- /* If we have an error, it may be caused by a corrupt text base.
- Check the checksum and discard `err' if they don't match. */
+ /* If we have an error, it may be caused by a corrupt text base,
+ so check the checksum. */
if (expected_md5_checksum && verify_checksum
&& !svn_checksum_match(expected_md5_checksum, verify_checksum))
{
@@ -1142,19 +1133,20 @@ svn_wc__internal_transmit_text_deltas(co
investigate. Other commands could be affected,
too, such as `svn diff'. */
- /* Deliberately ignore errors; the error about the
- checksum mismatch is more important to return. */
- svn_error_clear(err);
if (tempfile)
- svn_error_clear(svn_io_remove_file2(*tempfile, TRUE, scratch_pool));
+ err = svn_error_compose_create(
+ err,
+ svn_io_remove_file2(*tempfile, TRUE, scratch_pool));
- return svn_error_create(SVN_ERR_WC_CORRUPT_TEXT_BASE,
- svn_checksum_mismatch_err(expected_md5_checksum, verify_checksum,
+ err = svn_error_compose_create(
+ svn_checksum_mismatch_err(expected_md5_checksum, verify_checksum,
scratch_pool,
_("Checksum mismatch for text base of '%s'"),
svn_dirent_local_style(local_abspath,
scratch_pool)),
- NULL);
+ err);
+
+ return svn_error_create(SVN_ERR_WC_CORRUPT_TEXT_BASE, err, NULL);
}
/* Now, handle that delta transmission error if any, so we can stop