Initial import.
[profile/ivi/apr.git] / test / globalmutexchild.c
1 /* Licensed to the Apache Software Foundation (ASF) under one or more
2  * contributor license agreements.  See the NOTICE file distributed with
3  * this work for additional information regarding copyright ownership.
4  * The ASF licenses this file to You under the Apache License, Version 2.0
5  * (the "License"); you may not use this file except in compliance with
6  * the License.  You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "testglobalmutex.h"
18 #include "apr_pools.h"
19 #include "apr_file_io.h"
20 #include "apr_general.h"
21 #include "apr_global_mutex.h"
22 #include "apr_strings.h"
23 #include "apr.h"
24
25 #if APR_HAVE_STDLIB_H
26 #include <stdlib.h>
27 #endif
28
29
30 int main(int argc, const char * const argv[])
31 {
32     apr_pool_t *p;
33     int i = 0;
34     apr_lockmech_e mech;
35     apr_global_mutex_t *global_lock;
36     apr_status_t rv;
37
38     apr_initialize();
39     atexit(apr_terminate);
40     
41     apr_pool_create(&p, NULL);
42     if (argc >= 2) {
43         mech = (apr_lockmech_e)apr_strtoi64(argv[1], NULL, 0);
44     }
45     else {
46         mech = APR_LOCK_DEFAULT;
47     }
48     rv = apr_global_mutex_create(&global_lock, LOCKNAME, mech, p);
49     if (rv != APR_SUCCESS) {
50         exit(-rv);
51     }
52     apr_global_mutex_child_init(&global_lock, LOCKNAME, p);
53     
54     while (1) {
55         apr_global_mutex_lock(global_lock);
56         if (i == MAX_ITER) {
57             apr_global_mutex_unlock(global_lock);
58             exit(i);
59         }
60         i++;
61         apr_global_mutex_unlock(global_lock);
62     }
63     exit(0);
64 }