Author: svn-role
Date: Tue Mar 29 04:01:20 2022
New Revision: 1899341
URL: http://svn.apache.org/viewvc?rev=1899341&view=rev
Log:
Merge r1883355 from trunk:
* r1883355
Use the APR-1.4+ API for flushing file contents to disk.
Justification:
Reduce code duplication between APR and SVN.
Votes:
+1: brane, jun66j5, markphip
Modified:
subversion/branches/1.14.x/ (props changed)
subversion/branches/1.14.x/STATUS
subversion/branches/1.14.x/subversion/libsvn_subr/io.c
Propchange: subversion/branches/1.14.x/
------------------------------------------------------------------------------
Merged /subversion/trunk:r1883355
Modified: subversion/branches/1.14.x/STATUS
URL:
http://svn.apache.org/viewvc/subversion/branches/1.14.x/STATUS?rev=1899341&r1=1899340&r2=1899341&view=diff
==============================================================================
--- subversion/branches/1.14.x/STATUS (original)
+++ subversion/branches/1.14.x/STATUS Tue Mar 29 04:01:20 2022
@@ -79,13 +79,6 @@ Approved changes:
Votes:
+1: jamessan, stsp
- * r1883355
- Use the APR-1.4+ API for flushing file contents to disk.
- Justification:
- Reduce code duplication between APR and SVN.
- Votes:
- +1: brane, jun66j5, markphip
-
* r1881534
Fix issue #4864 "build/ac-macros/macosx.m4: workaround AC_RUN_IFELSE"
Justification:
Modified: subversion/branches/1.14.x/subversion/libsvn_subr/io.c
URL:
http://svn.apache.org/viewvc/subversion/branches/1.14.x/subversion/libsvn_subr/io.c?rev=1899341&r1=1899340&r2=1899341&view=diff
==============================================================================
--- subversion/branches/1.14.x/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/1.14.x/subversion/libsvn_subr/io.c Tue Mar 29 04:01:20
2022
@@ -2703,7 +2703,6 @@ svn_io__file_lock_autocreate(const char
svn_error_t *svn_io_file_flush_to_disk(apr_file_t *file,
apr_pool_t *pool)
{
- apr_os_file_t filehand;
const char *fname;
apr_status_t apr_err;
@@ -2713,49 +2712,21 @@ svn_error_t *svn_io_file_flush_to_disk(a
if (apr_err)
return svn_error_wrap_apr(apr_err, _("Can't get file name"));
- /* ### In apr 1.4+ we could delegate most of this function to
- apr_file_sync(). The only major difference is that this doesn't
- contain the retry loop for EINTR on linux. */
-
- /* First make sure that any user-space buffered data is flushed. */
- SVN_ERR(svn_io_file_flush(file, pool));
-
- apr_os_file_get(&filehand, file);
-
- /* Call the operating system specific function to actually force the
- data to disk. */
- {
-#ifdef WIN32
-
- if (! FlushFileBuffers(filehand))
- return svn_error_wrap_apr(apr_get_os_error(),
- _("Can't flush file '%s' to disk"),
- try_utf8_from_internal_style(fname, pool));
-
-#else
- int rv;
-
- do {
-#ifdef F_FULLFSYNC
- rv = fcntl(filehand, F_FULLFSYNC, 0);
-#else
- rv = fsync(filehand);
-#endif
- } while (rv == -1 && APR_STATUS_IS_EINTR(apr_get_os_error()));
-
- /* If the file is in a memory filesystem, fsync() may return
- EINVAL. Presumably the user knows the risks, and we can just
- ignore the error. */
- if (rv == -1 && APR_STATUS_IS_EINVAL(apr_get_os_error()))
- return SVN_NO_ERROR;
-
- if (rv == -1)
- return svn_error_wrap_apr(apr_get_os_error(),
- _("Can't flush file '%s' to disk"),
- try_utf8_from_internal_style(fname, pool));
+ do {
+ apr_err = apr_file_datasync(file);
+ } while(APR_STATUS_IS_EINTR(apr_err));
+
+ /* If the file is in a memory filesystem, fsync() may return
+ EINVAL. Presumably the user knows the risks, and we can just
+ ignore the error. */
+ if (APR_STATUS_IS_EINVAL(apr_err))
+ return SVN_NO_ERROR;
+
+ if (apr_err)
+ return svn_error_wrap_apr(apr_err,
+ _("Can't flush file '%s' to disk"),
+ try_utf8_from_internal_style(fname, pool));
-#endif
- }
return SVN_NO_ERROR;
}