APR_DECLARE(apr_status_t) apr_os_proc_mutex_put_ex(apr_proc_mutex_t **pmutex, apr_os_proc_mutex_t *ospmutex, apr_lockmech_e mech, int register_cleanup, apr_pool_t *pool) { apr_status_t rv; if (pool == NULL) { return APR_ENOPOOL; } if ((*pmutex) == NULL) { (*pmutex) = (apr_proc_mutex_t *)apr_pcalloc(pool, sizeof(apr_proc_mutex_t)); (*pmutex)->pool = pool; } rv = proc_mutex_choose_method(*pmutex, mech, ospmutex); #if APR_HAS_FCNTL_SERIALIZE || APR_HAS_FLOCK_SERIALIZE if (rv == APR_SUCCESS) { rv = apr_os_file_put(&(*pmutex)->interproc, &(*pmutex)->os.crossproc, 0, pool); } #endif if (rv == APR_SUCCESS && register_cleanup) { apr_pool_cleanup_register(pool, *pmutex, apr_proc_mutex_cleanup, apr_pool_cleanup_null); } return rv; }
APR_DECLARE(const char *) apr_proc_mutex_defname(void) { apr_status_t rv; apr_proc_mutex_t mutex; if ((rv = proc_mutex_choose_method(&mutex, APR_LOCK_DEFAULT)) != APR_SUCCESS) { return "unknown"; } mutex.meth = mutex.inter_meth; return apr_proc_mutex_name(&mutex); }
static apr_status_t proc_mutex_create(apr_proc_mutex_t *new_mutex, apr_lockmech_e mech, const char *fname) { apr_status_t rv; if ((rv = proc_mutex_choose_method(new_mutex, mech, NULL)) != APR_SUCCESS) { return rv; } if ((rv = new_mutex->meth->create(new_mutex, fname)) != APR_SUCCESS) { return rv; } return APR_SUCCESS; }