112 pthread_cond_init(&respool->available, NULL); |
112 pthread_cond_init(&respool->available, NULL); |
113 |
113 |
114 return 0; |
114 return 0; |
115 } |
115 } |
116 |
116 |
117 ResourceData* resourcepool_lookup(Session *sn, Request *rq, const char *name, int flags) { |
117 static ResourceData* s_resourcepool_lookup(ServerConfiguration *cfg, Request *opt_rq, Session *opt_sn, const char *name, int flags) { |
118 NSAPIRequest *request = (NSAPIRequest*)rq; |
118 NSAPIRequest *request = (NSAPIRequest*)opt_rq; |
119 NSAPISession *session = (NSAPISession*)sn; |
119 NSAPISession *session = (NSAPISession*)opt_sn; |
120 ServerConfiguration *cfg = session->config; |
|
121 |
|
122 ResourceDataPrivate *resource = NULL; |
120 ResourceDataPrivate *resource = NULL; |
123 |
121 |
124 // was this resource already used by this request? |
122 // was this resource already used by this request? |
125 if(request && request->resources) { |
123 if(request && request->resources) { |
126 resource = ucx_map_cstr_get(request->resources, name); |
124 resource = ucx_map_cstr_get(request->resources, name); |
168 |
166 |
169 // save the resource in the request object, for caching and also |
167 // save the resource in the request object, for caching and also |
170 // for cleanup later |
168 // for cleanup later |
171 int err = 0; |
169 int err = 0; |
172 if(resource) { |
170 if(resource) { |
173 if(request) { |
171 if(request && session) { |
174 if(!request->resources) { |
172 if(!request->resources) { |
175 request->resources = ucx_map_new_a(&session->allocator, 8); |
173 request->resources = ucx_map_new_a(&session->allocator, 8); |
176 } |
174 } |
177 |
175 |
178 if(request->resources) { |
176 if(request->resources) { |
198 } |
196 } |
199 |
197 |
200 pthread_mutex_unlock(&respool->lock); |
198 pthread_mutex_unlock(&respool->lock); |
201 |
199 |
202 return (ResourceData*)resource; |
200 return (ResourceData*)resource; |
|
201 } |
|
202 |
|
203 ResourceData* resourcepool_cfg_lookup(ServerConfiguration *cfg, const char *name, int flags) { |
|
204 return s_resourcepool_lookup(cfg, NULL, NULL, name, flags); |
|
205 } |
|
206 |
|
207 ResourceData* resourcepool_lookup(Session *sn, Request *rq, const char *name, int flags) { |
|
208 NSAPISession *session = (NSAPISession*)sn; |
|
209 ServerConfiguration *cfg = session->config; |
|
210 return s_resourcepool_lookup(cfg, rq, sn, name, flags); |
203 } |
211 } |
204 |
212 |
205 void resourcepool_free(Session *sn, Request *rq, ResourceData *resource) { |
213 void resourcepool_free(Session *sn, Request *rq, ResourceData *resource) { |
206 ResourceDataPrivate *res = (ResourceDataPrivate*)resource; |
214 ResourceDataPrivate *res = (ResourceDataPrivate*)resource; |
207 ResourcePool *respool = resource->resourcepool; |
215 ResourcePool *respool = resource->resourcepool; |