/* PR rtl-optimization/16199 */ /* Origin: Olaf Klein */ typedef enum { APR_LOCK_FCNTL, APR_LOCK_FLOCK, APR_LOCK_SYSVSEM, APR_LOCK_PROC_PTHREAD, APR_LOCK_POSIXSEM, APR_LOCK_DEFAULT } apr_lockmech_e; struct apr_proc_mutex_unix_lock_methods_t { unsigned int flags; const char *name; }; typedef struct apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_lock_methods_t; extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_sysv_methods; struct apr_proc_mutex_t { const apr_proc_mutex_unix_lock_methods_t *inter_meth; int curr_locked; char *fname; }; typedef struct apr_proc_mutex_t apr_proc_mutex_t; extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_proc_pthread_methods; extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_fcntl_methods; static int proc_mutex_choose_method(apr_proc_mutex_t *new_mutex, apr_lockmech_e mech) { switch (mech) { case APR_LOCK_FCNTL: new_mutex->inter_meth = &apr_proc_mutex_unix_fcntl_methods; break; case APR_LOCK_FLOCK: return ((20000 + 50000) + 23); break; case APR_LOCK_SYSVSEM: new_mutex->inter_meth = &apr_proc_mutex_unix_sysv_methods; break; case APR_LOCK_POSIXSEM: return ((20000 + 50000) + 23); break; case APR_LOCK_PROC_PTHREAD: new_mutex->inter_meth = &apr_proc_mutex_unix_proc_pthread_methods; break; case APR_LOCK_DEFAULT: new_mutex->inter_meth = &apr_proc_mutex_unix_proc_pthread_methods; break; default: return ((20000 + 50000) + 23); } return 0; } const char* apr_proc_mutex_defname(void) { apr_proc_mutex_t mutex; if (proc_mutex_choose_method(&mutex, APR_LOCK_DEFAULT) != 0) { return "unknown"; } }