bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / httpd-2.0.64 / srclib / apr / threadproc / netware / threadpriv.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 "apr_portable.h"
18 #include "apr_arch_threadproc.h"
19
20 apr_status_t apr_threadkey_private_create(apr_threadkey_t **key, 
21                                         void (*dest)(void *), apr_pool_t *pool) 
22 {
23     apr_status_t stat;
24     
25     (*key) = (apr_threadkey_t *)apr_palloc(pool, sizeof(apr_threadkey_t));
26         if ((*key) == NULL) {
27         return APR_ENOMEM;
28     }
29
30     (*key)->pool = pool;
31
32     if ((stat = NXKeyCreate(NULL, dest, &(*key)->key)) == 0) {
33         return stat;
34     }
35     return stat;
36 }
37
38 apr_status_t apr_threadkey_private_get(void **new, apr_threadkey_t *key)
39 {
40     apr_status_t stat;
41     
42     if ((stat = NXKeyGetValue(key->key, new)) == 0) {
43         return APR_SUCCESS;
44     }
45     else {
46         return stat;    
47     }
48 }
49
50 apr_status_t apr_threadkey_private_set(void *priv, apr_threadkey_t *key)
51 {
52     apr_status_t stat;
53     if ((stat = NXKeySetValue(key->key, priv)) == 0) {
54         return APR_SUCCESS;
55     }
56     else {
57         return stat;
58     }
59 }
60
61 apr_status_t apr_threadkey_private_delete(apr_threadkey_t *key)
62 {
63     apr_status_t stat;
64     if ((stat = NXKeyDelete(key->key)) == 0) {
65         return APR_SUCCESS; 
66     }
67     return stat;
68 }
69
70 apr_status_t apr_threadkey_data_get(void **data, const char *key, apr_threadkey_t *threadkey)
71 {
72     return apr_pool_userdata_get(data, key, threadkey->pool);
73 }
74
75 apr_status_t apr_threadkey_data_set(void *data,
76                                  const char *key, apr_status_t (*cleanup) (void *),
77                                  apr_threadkey_t *threadkey)
78 {
79     return apr_pool_userdata_set(data, key, cleanup, threadkey->pool);
80 }
81
82 apr_status_t apr_os_threadkey_get(apr_os_threadkey_t *thekey,
83                                                apr_threadkey_t *key)
84 {
85     thekey = &(key->key);
86     return APR_SUCCESS;
87 }
88
89 apr_status_t apr_os_threadkey_put(apr_threadkey_t **key, 
90                                 apr_os_threadkey_t *thekey, apr_pool_t *pool)
91 {
92     if (pool == NULL) {
93         return APR_ENOPOOL;
94     }
95     if ((*key) == NULL) {
96         (*key) = (apr_threadkey_t *)apr_palloc(pool, sizeof(apr_threadkey_t));
97         (*key)->pool = pool;
98     }
99     (*key)->key = *thekey;
100     return APR_SUCCESS;
101 }           
102