Lines Matching defs:requestmgr

85 	dns_requestmgr_t	       *requestmgr;
114 static void mgr_destroy(dns_requestmgr_t *requestmgr);
115 static void mgr_shutdown(dns_requestmgr_t *requestmgr);
116 static unsigned int mgr_gethash(dns_requestmgr_t *requestmgr);
117 static void send_shutdown_events(dns_requestmgr_t *requestmgr);
146 dns_requestmgr_t *requestmgr;
169 requestmgr = isc_mem_get(mctx, sizeof(*requestmgr));
170 if (requestmgr == NULL)
173 result = isc_mutex_init(&requestmgr->lock);
175 isc_mem_put(mctx, requestmgr, sizeof(*requestmgr));
179 result = isc_mutex_init(&requestmgr->locks[i]);
182 DESTROYLOCK(&requestmgr->locks[i]);
183 DESTROYLOCK(&requestmgr->lock);
184 isc_mem_put(mctx, requestmgr, sizeof(*requestmgr));
188 requestmgr->timermgr = timermgr;
189 requestmgr->socketmgr = socketmgr;
190 requestmgr->taskmgr = taskmgr;
191 requestmgr->dispatchmgr = dispatchmgr;
192 requestmgr->dispatchv4 = NULL;
194 dns_dispatch_attach(dispatchv4, &requestmgr->dispatchv4);
195 requestmgr->dispatchv6 = NULL;
197 dns_dispatch_attach(dispatchv6, &requestmgr->dispatchv6);
198 requestmgr->mctx = NULL;
199 isc_mem_attach(mctx, &requestmgr->mctx);
200 requestmgr->eref = 1; /* implicit attach */
201 requestmgr->iref = 0;
202 ISC_LIST_INIT(requestmgr->whenshutdown);
203 ISC_LIST_INIT(requestmgr->requests);
204 requestmgr->exiting = ISC_FALSE;
205 requestmgr->hash = 0;
206 requestmgr->magic = REQUESTMGR_MAGIC;
208 req_log(ISC_LOG_DEBUG(3), "dns_requestmgr_create: %p", requestmgr);
210 *requestmgrp = requestmgr;
215 dns_requestmgr_whenshutdown(dns_requestmgr_t *requestmgr, isc_task_t *task,
223 REQUIRE(VALID_REQUESTMGR(requestmgr));
229 LOCK(&requestmgr->lock);
231 if (requestmgr->exiting) {
235 event->ev_sender = requestmgr;
241 ISC_LIST_APPEND(requestmgr->whenshutdown, event, ev_link);
243 UNLOCK(&requestmgr->lock);
247 dns_requestmgr_shutdown(dns_requestmgr_t *requestmgr) {
249 REQUIRE(VALID_REQUESTMGR(requestmgr));
251 req_log(ISC_LOG_DEBUG(3), "dns_requestmgr_shutdown: %p", requestmgr);
253 LOCK(&requestmgr->lock);
254 mgr_shutdown(requestmgr);
255 UNLOCK(&requestmgr->lock);
259 mgr_shutdown(dns_requestmgr_t *requestmgr) {
265 if (!requestmgr->exiting) {
266 requestmgr->exiting = ISC_TRUE;
267 for (request = ISC_LIST_HEAD(requestmgr->requests);
272 if (requestmgr->iref == 0) {
273 INSIST(ISC_LIST_EMPTY(requestmgr->requests));
274 send_shutdown_events(requestmgr);
300 dns_requestmgr_t *requestmgr;
304 requestmgr = *requestmgrp;
305 REQUIRE(VALID_REQUESTMGR(requestmgr));
308 LOCK(&requestmgr->lock);
309 INSIST(requestmgr->iref > 0);
310 requestmgr->iref--;
313 requestmgr, requestmgr->eref, requestmgr->iref);
315 if (requestmgr->iref == 0 && requestmgr->exiting) {
316 INSIST(ISC_LIST_HEAD(requestmgr->requests) == NULL);
317 send_shutdown_events(requestmgr);
318 if (requestmgr->eref == 0)
321 UNLOCK(&requestmgr->lock);
324 mgr_destroy(requestmgr);
345 dns_requestmgr_t *requestmgr;
349 requestmgr = *requestmgrp;
350 REQUIRE(VALID_REQUESTMGR(requestmgr));
352 LOCK(&requestmgr->lock);
353 INSIST(requestmgr->eref > 0);
354 requestmgr->eref--;
357 requestmgr, requestmgr->eref, requestmgr->iref);
359 if (requestmgr->eref == 0 && requestmgr->iref == 0) {
360 INSIST(requestmgr->exiting &&
361 ISC_LIST_HEAD(requestmgr->requests) == NULL);
364 UNLOCK(&requestmgr->lock);
367 mgr_destroy(requestmgr);
373 send_shutdown_events(dns_requestmgr_t *requestmgr) {
377 req_log(ISC_LOG_DEBUG(3), "send_shutdown_events: %p", requestmgr);
382 for (event = ISC_LIST_HEAD(requestmgr->whenshutdown);
386 ISC_LIST_UNLINK(requestmgr->whenshutdown, event, ev_link);
388 event->ev_sender = requestmgr;
394 mgr_destroy(dns_requestmgr_t *requestmgr) {
400 REQUIRE(requestmgr->eref == 0);
401 REQUIRE(requestmgr->iref == 0);
403 DESTROYLOCK(&requestmgr->lock);
405 DESTROYLOCK(&requestmgr->locks[i]);
406 if (requestmgr->dispatchv4 != NULL)
407 dns_dispatch_detach(&requestmgr->dispatchv4);
408 if (requestmgr->dispatchv6 != NULL)
409 dns_dispatch_detach(&requestmgr->dispatchv6);
410 requestmgr->magic = 0;
411 mctx = requestmgr->mctx;
412 isc_mem_put(mctx, requestmgr, sizeof(*requestmgr));
417 mgr_gethash(dns_requestmgr_t *requestmgr) {
422 requestmgr->hash++;
423 return (requestmgr->hash % DNS_REQUEST_NLOCKS);
470 request->requestmgr = NULL;
511 create_tcp_dispatch(dns_requestmgr_t *requestmgr, isc_sockaddr_t *srcaddr,
520 result = isc_socket_create(requestmgr->socketmgr,
546 result = dns_dispatch_createtcp(requestmgr->dispatchmgr,
547 socket, requestmgr->taskmgr,
556 find_udp_dispatch(dns_requestmgr_t *requestmgr, isc_sockaddr_t *srcaddr,
565 disp = requestmgr->dispatchv4;
569 disp = requestmgr->dispatchv6;
599 return (dns_dispatch_getudp(requestmgr->dispatchmgr,
600 requestmgr->socketmgr,
601 requestmgr->taskmgr,
609 get_dispatch(isc_boolean_t tcp, dns_requestmgr_t *requestmgr,
615 result = create_tcp_dispatch(requestmgr, srcaddr,
618 result = find_udp_dispatch(requestmgr, srcaddr,
642 dns_request_createraw(dns_requestmgr_t *requestmgr, isc_buffer_t *msgbuf,
648 return(dns_request_createraw3(requestmgr, msgbuf, srcaddr, destaddr,
654 dns_request_createraw2(dns_requestmgr_t *requestmgr, isc_buffer_t *msgbuf,
666 return (dns_request_createraw3(requestmgr, msgbuf, srcaddr, destaddr,
673 dns_request_createraw3(dns_requestmgr_t *requestmgr, isc_buffer_t *msgbuf,
689 REQUIRE(VALID_REQUESTMGR(requestmgr));
699 mctx = requestmgr->mctx;
703 if (isblackholed(requestmgr->dispatchmgr, destaddr))
721 result = isc_timer_create(requestmgr->timermgr, isc_timertype_inactive,
748 result = get_dispatch(tcp, requestmgr, srcaddr, destaddr,
756 requestmgr->socketmgr);
780 LOCK(&requestmgr->lock);
781 if (requestmgr->exiting) {
782 UNLOCK(&requestmgr->lock);
786 requestmgr_attach(requestmgr, &request->requestmgr);
787 request->hash = mgr_gethash(requestmgr);
788 ISC_LIST_APPEND(requestmgr->requests, request, link);
789 UNLOCK(&requestmgr->lock);
814 LOCK(&requestmgr->lock);
815 ISC_LIST_UNLINK(requestmgr->requests, request, link);
816 UNLOCK(&requestmgr->lock);
828 dns_request_create(dns_requestmgr_t *requestmgr, dns_message_t *message,
835 return (dns_request_createvia3(requestmgr, message, NULL, address,
841 dns_request_createvia(dns_requestmgr_t *requestmgr, dns_message_t *message,
848 return(dns_request_createvia3(requestmgr, message, srcaddr, destaddr,
854 dns_request_createvia2(dns_requestmgr_t *requestmgr, dns_message_t *message,
865 return (dns_request_createvia3(requestmgr, message, srcaddr, destaddr,
872 dns_request_createvia3(dns_requestmgr_t *requestmgr, dns_message_t *message,
889 REQUIRE(VALID_REQUESTMGR(requestmgr));
897 mctx = requestmgr->mctx;
905 if (isblackholed(requestmgr->dispatchmgr, destaddr))
923 result = isc_timer_create(requestmgr->timermgr, isc_timertype_inactive,
945 result = get_dispatch(tcp, requestmgr, srcaddr, destaddr,
953 requestmgr->socketmgr);
986 LOCK(&requestmgr->lock);
987 if (requestmgr->exiting) {
988 UNLOCK(&requestmgr->lock);
992 requestmgr_attach(requestmgr, &request->requestmgr);
993 request->hash = mgr_gethash(requestmgr);
994 ISC_LIST_APPEND(requestmgr->requests, request, link);
995 UNLOCK(&requestmgr->lock);
1020 LOCK(&requestmgr->lock);
1021 ISC_LIST_UNLINK(requestmgr->requests, request, link);
1022 UNLOCK(&requestmgr->lock);
1146 LOCK(&request->requestmgr->locks[request->hash]);
1151 UNLOCK(&request->requestmgr->locks[request->hash]);
1162 LOCK(&request->requestmgr->locks[request->hash]);
1168 UNLOCK(&request->requestmgr->locks[request->hash]);
1214 LOCK(&request->requestmgr->lock);
1215 LOCK(&request->requestmgr->locks[request->hash]);
1216 ISC_LIST_UNLINK(request->requestmgr->requests, request, link);
1219 UNLOCK(&request->requestmgr->locks[request->hash]);
1220 UNLOCK(&request->requestmgr->lock);
1267 LOCK(&request->requestmgr->locks[request->hash]);
1289 UNLOCK(&request->requestmgr->locks[request->hash]);
1306 LOCK(&request->requestmgr->locks[request->hash]);
1321 UNLOCK(&request->requestmgr->locks[request->hash]);
1341 LOCK(&request->requestmgr->locks[request->hash]);
1367 UNLOCK(&request->requestmgr->locks[request->hash]);
1380 LOCK(&request->requestmgr->locks[request->hash]);
1395 UNLOCK(&request->requestmgr->locks[request->hash]);
1441 if (request->requestmgr != NULL)
1442 requestmgr_detach(&request->requestmgr);