src/server/daemon/resourcepool.c

branch
webdav
changeset 371
ea836c4f7341
parent 366
47bc686fafe4
child 415
d938228c382e
equal deleted inserted replaced
370:d6d8c86c95c3 371:ea836c4f7341
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;

mercurial