2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-29 05:28:00 +00:00

Make dns_dt_reopen() request task-exclusive mode on its own

Instead of relying on the caller to set up task-exclusive mode, make
dns_dt_reopen() enforce task-exclusive mode itself, using the task
specified at dnstap environment creation time.
This commit is contained in:
Michał Kępień 2018-02-05 21:22:53 +01:00
parent f199a5a9ae
commit 8e3c16175a
3 changed files with 15 additions and 6 deletions

View File

@ -3549,8 +3549,9 @@ configure_dnstap(const cfg_obj_t **maps, dns_view_t *view) {
fstrm_iothr_options_set_reopen_interval(fopt, i); fstrm_iothr_options_set_reopen_interval(fopt, i);
} }
CHECKM(dns_dt_create(named_g_mctx, dmode, dpath, CHECKM(dns_dt_create2(named_g_mctx, dmode, dpath,
&fopt, &named_g_server->dtenv), &fopt, named_g_server->task,
&named_g_server->dtenv),
"unable to create dnstap environment"); "unable to create dnstap environment");
CHECKM(dns_dt_setupfile(named_g_server->dtenv, CHECKM(dns_dt_setupfile(named_g_server->dtenv,
@ -14825,10 +14826,7 @@ named_server_dnstap(named_server_t *server, isc_lex_t *lex,
return (DNS_R_SYNTAX); return (DNS_R_SYNTAX);
} }
result = isc_task_beginexclusive(server->task);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
result = dns_dt_reopen(server->dtenv, backups); result = dns_dt_reopen(server->dtenv, backups);
isc_task_endexclusive(server->task);
return (result); return (result);
#else #else
UNUSED(server); UNUSED(server);

View File

@ -55,6 +55,7 @@
#include <isc/once.h> #include <isc/once.h>
#include <isc/print.h> #include <isc/print.h>
#include <isc/sockaddr.h> #include <isc/sockaddr.h>
#include <isc/task.h>
#include <isc/thread.h> #include <isc/thread.h>
#include <isc/time.h> #include <isc/time.h>
#include <isc/types.h> #include <isc/types.h>
@ -331,11 +332,18 @@ dns_dt_reopen(dns_dtenv_t *env, int roll) {
REQUIRE(VALID_DTENV(env)); REQUIRE(VALID_DTENV(env));
/*
* Run in task-exclusive mode.
*/
result = isc_task_beginexclusive(env->reopen_task);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
/* /*
* Check that we can create a new fw object. * Check that we can create a new fw object.
*/ */
fwopt = fstrm_writer_options_init(); fwopt = fstrm_writer_options_init();
if (fwopt == NULL) { if (fwopt == NULL) {
isc_task_endexclusive(env->reopen_task);
return (ISC_R_NOMEMORY); return (ISC_R_NOMEMORY);
} }
@ -424,6 +432,8 @@ dns_dt_reopen(dns_dtenv_t *env, int roll) {
if (fuwopt != NULL) if (fuwopt != NULL)
fstrm_unix_writer_options_destroy(&fuwopt); fstrm_unix_writer_options_destroy(&fuwopt);
isc_task_endexclusive(env->reopen_task);
return (result); return (result);
} }

View File

@ -195,7 +195,8 @@ dns_dt_reopen(dns_dtenv_t *env, int roll);
* keep. If 'roll' is negative, or if 'env->mode' is dns_dtmode_unix, * keep. If 'roll' is negative, or if 'env->mode' is dns_dtmode_unix,
* then the channel is simply reopened. * then the channel is simply reopened.
* *
* Note: dns_dt_reopen() must be called in task exclusive mode. * Note: dns_dt_reopen() uses task-exclusive mode and must be run in the
* context of env->reopen_task.
* *
* Requires: * Requires:
*\li 'env' is a valid dnstap environment. *\li 'env' is a valid dnstap environment.