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