On Jul 1, 2011, at 12:04 PM, stefan2_at_apache.org wrote:
> Author: stefan2
> Date: Fri Jul 1 19:04:29 2011
> New Revision: 1142026
>
> URL: http://svn.apache.org/viewvc?rev=1142026&view=rev
> Log:
> Introduce the svn_mutex API and implement it
>
> * subversion/include/private/svn_mutex.h
> new private API header
> * subversion/libsvn_subr/svn_mutex.c
> implement the new API
>
> Added:
> subversion/branches/svn_mutex/subversion/include/private/svn_mutex.h
> subversion/branches/svn_mutex/subversion/libsvn_subr/svn_mutex.c
>
> Added: subversion/branches/svn_mutex/subversion/include/private/svn_mutex.h
> URL: http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/include/private/svn_mutex.h?rev=1142026&view=auto
> ==============================================================================
> --- subversion/branches/svn_mutex/subversion/include/private/svn_mutex.h (added)
> +++ subversion/branches/svn_mutex/subversion/include/private/svn_mutex.h Fri Jul 1 19:04:29 2011
> @@ -0,0 +1,82 @@
> +/**
> + * @copyright
> + * ====================================================================
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + * ====================================================================
> + * @endcopyright
> + *
> + * @file svn_mutex.h
> + * @brief Strutures and functions for mutual exclusion
> + */
> +
> +#ifndef SVN_MUTEX_H
> +#define SVN_MUTEX_H
> +
> +#include <apr_thread_mutex.h>
> +#include "svn_error.h"
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> +/**
> + * This is a simple wrapper around @c apr_thread_mutex_t and will be a
> + * valid identifier even if APR does not support threading.
> + */
> +typedef struct svn_mutex__t
> +{
> +#if APR_HAS_THREADS
> +
> + /** A mutex for synchronization between threads. It may be NULL, in
> + * which case no synchronization will take place. The latter is useful,
> + * if implement some functionality where synchronization is optional.
> + */
> + apr_thread_mutex_t *mutex;
> +
> +#endif
> +} svn_mutex__t;
> +
> +/** Initialize the @a *mutex with a lifetime defined by @a pool, if
> + * @a enable_mutex is TRUE and with @c NULL otherwise. If @a enable_mutex
> + * is set but threading is not supported by APR, this function returns an
> + * @c APR_ENOTIMPL error.
The NULL part is a little confusing, it took a couple of reads to see the NULL was associated with *mutex. Suggest changing it so something like
/** If @a enable_mutex is TRUE, initialize the @a *mutex with a lifetime
* defined by @a pool, otherwise initialize it with @c NULL.
How would we use enable_mutex? Seems like a compile time constant, not a runtime one.
> + */
> +svn_error_t *
> +svn_mutex__init(svn_mutex__t *mutex,
> + svn_boolean_t enable_mutex,
> + apr_pool_t *pool);
> +
> +/** Acquire the @a mutex, if that has been enabled in @ref svn_mutex__init.
> + * Make sure to call @ref svn_mutex__unlock some time later in the same
> + * thread to release the mutex again. Recursive locking are not supported.
> + */
> +svn_error_t *
> +svn_mutex__lock(svn_mutex__t mutex);
> +
> +/** Release the @a mutex, previously acquired using @ref svn_mutex__lock
> + * that has been enabled in @ref svn_mutex__init.
> + */
> +svn_error_t *
> +svn_mutex__unlock(svn_mutex__t mutex,
> + svn_error_t *err);
What is the input err for?
Blair
Received on 2011-07-01 21:12:17 CEST