You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2012/10/31 14:11:17 UTC
svn commit: r1404123 -
/subversion/trunk/subversion/libsvn_subr/named_atomic.c
Author: stefan2
Date: Wed Oct 31 13:11:17 2012
New Revision: 1404123
URL: http://svn.apache.org/viewvc?rev=1404123&view=rev
Log:
* subversion/libsvn_subr/named_atomic.c
(svn_atomic_namespace__create): rename sub_pool to subpool;
complete error handling
Suggested by: rhuijben
Found by: philip
Modified:
subversion/trunk/subversion/libsvn_subr/named_atomic.c
Modified: subversion/trunk/subversion/libsvn_subr/named_atomic.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/named_atomic.c?rev=1404123&r1=1404122&r2=1404123&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/named_atomic.c (original)
+++ subversion/trunk/subversion/libsvn_subr/named_atomic.c Wed Oct 31 13:11:17 2012
@@ -391,7 +391,7 @@ svn_atomic_namespace__create(svn_atomic_
const char *shm_name, *lock_name;
svn_node_kind_t kind;
- apr_pool_t *sub_pool = svn_pool_create(result_pool);
+ apr_pool_t *subpool = svn_pool_create(result_pool);
/* allocate the namespace data structure
*/
@@ -399,8 +399,8 @@ svn_atomic_namespace__create(svn_atomic_
/* construct the names of the system objects that we need
*/
- shm_name = apr_pstrcat(sub_pool, name, SHM_NAME_SUFFIX, NULL);
- lock_name = apr_pstrcat(sub_pool, name, MUTEX_NAME_SUFFIX, NULL);
+ shm_name = apr_pstrcat(subpool, name, SHM_NAME_SUFFIX, NULL);
+ lock_name = apr_pstrcat(subpool, name, MUTEX_NAME_SUFFIX, NULL);
/* initialize the lock objects
*/
@@ -426,7 +426,7 @@ svn_atomic_namespace__create(svn_atomic_
/* First, make sure that the underlying file exists. If it doesn't
* exist, create one and initialize its content.
*/
- err = svn_io_check_path(shm_name, &kind, sub_pool);
+ err = svn_io_check_path(shm_name, &kind, subpool);
if (!err && kind != svn_node_file)
{
err = svn_io_file_open(&file, shm_name,
@@ -441,7 +441,7 @@ svn_atomic_namespace__create(svn_atomic_
memset(&initial_data, 0, sizeof(initial_data));
err = svn_io_file_write_full(file, &initial_data,
sizeof(initial_data), NULL,
- sub_pool);
+ subpool);
}
}
else
@@ -453,25 +453,34 @@ svn_atomic_namespace__create(svn_atomic_
/* Now, map it into memory.
*/
- apr_err = apr_mmap_create(&mmap, file, 0, sizeof(*new_ns->data),
- APR_MMAP_READ | APR_MMAP_WRITE , result_pool);
- if (!apr_err)
- new_ns->data = mmap->mm;
-
- svn_pool_destroy(sub_pool);
-
- /* Cache the number of existing, complete entries. There can't be
- * incomplete ones from other processes because we hold the mutex.
- * Our process will also not access this information since we are
- * wither being called from within svn_atomic__init_once or by
- * svn_atomic_namespace__create for a new object.
- */
- new_ns->min_used = new_ns->data->count;
+ if (!err)
+ {
+ apr_err = apr_mmap_create(&mmap, file, 0, sizeof(*new_ns->data),
+ APR_MMAP_READ | APR_MMAP_WRITE , result_pool);
+ if (!apr_err)
+ new_ns->data = mmap->mm;
+ else
+ err = svn_error_createf(apr_err, NULL,
+ _("MMAP failed for file '%s'"), shm_name);
+ }
+
+ svn_pool_destroy(subpool);
+
+ if (!err && new_ns->data)
+ {
+ /* Cache the number of existing, complete entries. There can't be
+ * incomplete ones from other processes because we hold the mutex.
+ * Our process will also not access this information since we are
+ * wither being called from within svn_atomic__init_once or by
+ * svn_atomic_namespace__create for a new object.
+ */
+ new_ns->min_used = new_ns->data->count;
+ *ns = new_ns;
+ }
/* Unlock to allow other processes may access the shared memory as well.
*/
- *ns = new_ns;
- return unlock(&new_ns->mutex, SVN_NO_ERROR);
+ return unlock(&new_ns->mutex, err);
}
svn_error_t *