1/* PR rtl-optimization/16199 */ 2/* Origin: Olaf Klein <oklein@smallo.ruhr.de> */ 3 4typedef enum { 5 APR_LOCK_FCNTL, 6 APR_LOCK_FLOCK, 7 APR_LOCK_SYSVSEM, 8 APR_LOCK_PROC_PTHREAD, 9 APR_LOCK_POSIXSEM, 10 APR_LOCK_DEFAULT 11} apr_lockmech_e; 12 13struct apr_proc_mutex_unix_lock_methods_t { 14 unsigned int flags; 15 const char *name; 16}; 17 18typedef struct apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_lock_methods_t; 19 20extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_sysv_methods; 21 22struct apr_proc_mutex_t { 23 const apr_proc_mutex_unix_lock_methods_t *inter_meth; 24 int curr_locked; 25 char *fname; 26}; 27 28typedef struct apr_proc_mutex_t apr_proc_mutex_t; 29 30extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_proc_pthread_methods; 31 32extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_fcntl_methods; 33 34static int proc_mutex_choose_method(apr_proc_mutex_t *new_mutex, apr_lockmech_e mech) 35{ 36 switch (mech) { 37 case APR_LOCK_FCNTL: 38 new_mutex->inter_meth = &apr_proc_mutex_unix_fcntl_methods; 39 break; 40 case APR_LOCK_FLOCK: 41 return ((20000 + 50000) + 23); 42 break; 43 case APR_LOCK_SYSVSEM: 44 new_mutex->inter_meth = &apr_proc_mutex_unix_sysv_methods; 45 break; 46 case APR_LOCK_POSIXSEM: 47 return ((20000 + 50000) + 23); 48 break; 49 case APR_LOCK_PROC_PTHREAD: 50 new_mutex->inter_meth = &apr_proc_mutex_unix_proc_pthread_methods; 51 break; 52 case APR_LOCK_DEFAULT: 53 new_mutex->inter_meth = &apr_proc_mutex_unix_proc_pthread_methods; 54 break; 55 default: 56 return ((20000 + 50000) + 23); 57 } 58 return 0; 59} 60 61const char* apr_proc_mutex_defname(void) 62{ 63 apr_proc_mutex_t mutex; 64 65 if (proc_mutex_choose_method(&mutex, APR_LOCK_DEFAULT) != 0) { 66 return "unknown"; 67 } 68} 69