apr_status_t fcgid_mutex_create()

in modules/fcgid/fcgid_mutex_unix.c [96:130]


apr_status_t fcgid_mutex_create(apr_global_mutex_t **mutex,
                                const char **lockfilep,
                                const char *mutex_type,
                                apr_pool_t *pconf,
                                server_rec *s)
{
    apr_status_t rv;
    apr_lockmech_e mechanism = pick_mutex_mechanism();
    char *lockfile;

    /* XXX This lock file name generation is unfortunate, but defaulting
     * to a better place would require a directive to override it.  This
     * is resolved for httpd 2.3+ by hooking into the Mutex support.
     */
    lockfile = apr_palloc(pconf, L_tmpnam);
    tmpnam(lockfile);
    rv = apr_global_mutex_create(mutex, lockfile, mechanism, pconf);
    if (rv != APR_SUCCESS) {
        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
                     "mod_fcgid: Can't create global %s mutex", mutex_type);
        return rv;
    }

#ifdef AP_NEED_SET_MUTEX_PERMS
    rv = ap_unixd_set_global_mutex_perms(*mutex);
    if (rv != APR_SUCCESS) {
        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
                     "mod_fcgid: Can't set global %s mutex perms", mutex_type);
        return rv;
    }
#endif

    *lockfilep = lockfile;
    return APR_SUCCESS;
}