You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2015/11/24 21:13:03 UTC
svn commit: r1716240 - /subversion/trunk/subversion/libsvn_subr/io.c
Author: philip
Date: Tue Nov 24 20:13:02 2015
New Revision: 1716240
URL: http://svn.apache.org/viewvc?rev=1716240&view=rev
Log:
When getting the default file permissions for a file created outside
the system directory create the necessary temporary files in the
given directory. This removes the disk IO to TMPDIR during the first
commit made by mod_dav_svn and svnserve processes, all disk IO now
happens in the repositories.
* subversion/libsvn_subr/io.c
(get_default_file_perms): Create temporary files in given directory.
(merge_default_file_perms): Add directory parameter.
(svn_io_open_unique_file3): Pass directory.
Modified:
subversion/trunk/subversion/libsvn_subr/io.c
Modified: subversion/trunk/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/io.c?rev=1716240&r1=1716239&r2=1716240&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/io.c (original)
+++ subversion/trunk/subversion/libsvn_subr/io.c Tue Nov 24 20:13:02 2015
@@ -1531,14 +1531,17 @@ reown_file(const char *path,
}
/* Determine what the PERMS for a new file should be by looking at the
- permissions of a temporary file that we create.
+ permissions of a temporary file that we create in DIRECTORY.
+ DIRECTORY can be NULL in which case the system temporary dir is used.
Unfortunately, umask() as defined in POSIX provides no thread-safe way
to get at the current value of the umask, so what we're doing here is
the only way we have to determine which combination of write bits
(User/Group/World) should be set by default.
Make temporary allocations in SCRATCH_POOL. */
static svn_error_t *
-get_default_file_perms(apr_fileperms_t *perms, apr_pool_t *scratch_pool)
+get_default_file_perms(apr_fileperms_t *perms,
+ const char *directory,
+ apr_pool_t *scratch_pool)
{
/* the default permissions as read from the temp folder */
static apr_fileperms_t default_perms = 0;
@@ -1570,7 +1573,7 @@ get_default_file_perms(apr_fileperms_t *
+ (apr_uint32_t)apr_time_now());
fname_base = apr_psprintf(scratch_pool, "svn-%08x", randomish);
- SVN_ERR(svn_io_open_uniquely_named(&fd, &fname, NULL, fname_base,
+ SVN_ERR(svn_io_open_uniquely_named(&fd, &fname, directory, fname_base,
NULL, svn_io_file_del_none,
scratch_pool, scratch_pool));
err = svn_io_file_info_get(&finfo, APR_FINFO_PROT, fd, scratch_pool);
@@ -1588,16 +1591,19 @@ get_default_file_perms(apr_fileperms_t *
}
/* OR together permission bits of the file FD and the default permissions
- of a file as determined by get_default_file_perms(). Do temporary
+ of a file as determined by get_default_file_perms(). DIRECTORY is used
+ to create temporary files, DIRECTORY can be NULL. Do temporary
allocations in SCRATCH_POOL. */
static svn_error_t *
-merge_default_file_perms(apr_file_t *fd, apr_fileperms_t *perms,
+merge_default_file_perms(apr_file_t *fd,
+ apr_fileperms_t *perms,
+ const char *directory,
apr_pool_t *scratch_pool)
{
apr_finfo_t finfo;
apr_fileperms_t default_perms;
- SVN_ERR(get_default_file_perms(&default_perms, scratch_pool));
+ SVN_ERR(get_default_file_perms(&default_perms, directory, scratch_pool));
SVN_ERR(svn_io_file_info_get(&finfo, APR_FINFO_PROT, fd, scratch_pool));
/* Glom the perms together. */
@@ -5280,7 +5286,8 @@ svn_io_open_unique_file3(apr_file_t **fi
{
svn_error_t *err;
- SVN_ERR(merge_default_file_perms(tempfile, &perms, scratch_pool));
+ SVN_ERR(merge_default_file_perms(tempfile, &perms, dirpath,
+ scratch_pool));
err = file_perms_set2(tempfile, perms, scratch_pool);
if (err)
{