src/server/daemon/resourcepool.c

changeset 659
07b815faa6ac
parent 655
337cda289f34
equal deleted inserted replaced
658:7290604d846d 659:07b815faa6ac
46 void resource_pool_cleanup(void) { 46 void resource_pool_cleanup(void) {
47 cxMapFree(resource_pool_types); 47 cxMapFree(resource_pool_types);
48 } 48 }
49 49
50 int resourcepool_register_type(const char *type_name, ResourceType *type_info) { 50 int resourcepool_register_type(const char *type_name, ResourceType *type_info) {
51 if(cxMapPut(resource_pool_types, cx_hash_key_str(type_name), type_info)) { 51 if(cxMapPut(resource_pool_types, type_name, type_info)) {
52 log_ereport(LOG_CATASTROPHE, "resourcepool_register_type: OOM"); 52 log_ereport(LOG_CATASTROPHE, "resourcepool_register_type: OOM");
53 return 1; 53 return 1;
54 } 54 }
55 return 0; 55 return 0;
56 } 56 }
130 NSAPISession *session = (NSAPISession*)opt_sn; 130 NSAPISession *session = (NSAPISession*)opt_sn;
131 ResourceDataPrivate *resource = NULL; 131 ResourceDataPrivate *resource = NULL;
132 132
133 // was this resource already used by this request? 133 // was this resource already used by this request?
134 if(request && request->resources) { 134 if(request && request->resources) {
135 resource = cxMapGet(request->resources, cx_hash_key_str(name)); 135 resource = cxMapGet(request->resources, name);
136 if(resource) { 136 if(resource) {
137 return &resource->data; 137 return &resource->data;
138 } 138 }
139 } 139 }
140 140
141 ResourcePool *respool = cxMapGet(cfg->resources, cx_hash_key_str(name)); 141 ResourcePool *respool = cxMapGet(cfg->resources, name);
142 if(!respool) return NULL; 142 if(!respool) return NULL;
143 143
144 144
145 pthread_mutex_lock(&respool->lock); 145 pthread_mutex_lock(&respool->lock);
146 WSBool createResource = FALSE; 146 WSBool createResource = FALSE;
185 if(!request->resources) { 185 if(!request->resources) {
186 request->resources = cxHashMapCreate(pool_allocator(session->sn.pool), CX_STORE_POINTERS, 8); 186 request->resources = cxHashMapCreate(pool_allocator(session->sn.pool), CX_STORE_POINTERS, 8);
187 } 187 }
188 188
189 if(request->resources) { 189 if(request->resources) {
190 if(cxMapPut(request->resources, cx_hash_key_str(name), resource)) { 190 if(cxMapPut(request->resources, name, resource)) {
191 err = 1; 191 err = 1;
192 } 192 }
193 } else { 193 } else {
194 err = 1; 194 err = 1;
195 } 195 }
227 ResourceDataPrivate *res = (ResourceDataPrivate*)resource; 227 ResourceDataPrivate *res = (ResourceDataPrivate*)resource;
228 ResourcePool *respool = resource->resourcepool; 228 ResourcePool *respool = resource->resourcepool;
229 229
230 if(nsapi_rq && !nsapi_rq->finished) { 230 if(nsapi_rq && !nsapi_rq->finished) {
231 // request processing still ongoing and SAFs will be executed 231 // request processing still ongoing and SAFs will be executed
232 if(cxMapRemove(nsapi_rq->resources, cx_hash_key_str(respool->name))) { 232 if(cxMapRemove(nsapi_rq->resources, respool->name)) {
233 log_ereport(LOG_FAILURE, "resourcepool_free: cannot remove resource from request: potential double free"); 233 log_ereport(LOG_FAILURE, "resourcepool_free: cannot remove resource from request: potential double free");
234 } 234 }
235 } 235 }
236 // else: safe to ignore nsapi_rq->resources 236 // else: safe to ignore nsapi_rq->resources
237 237

mercurial