diff --git a/CHANGES b/CHANGES index d0dfc2a36f..86eb70b374 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5804. [func] Add a debug log message when starting and ending + the task exclusive mode. [GL #3137] + 5803. [func] Use compile-time paths in the documentation. [GL #2717] diff --git a/doc/notes/notes-current.rst b/doc/notes/notes-current.rst index f5abcd8a83..ded784f7a7 100644 --- a/doc/notes/notes-current.rst +++ b/doc/notes/notes-current.rst @@ -41,6 +41,11 @@ Feature Changes by a client are now included in the client information sent to DLZ modules when processing queries. :gl:`#3082` +- Add DEBUG(1) level messages when starting and ending BIND 9 task exclusive mode + that stops the normal DNS operation (f.e. for reconfiguration, interface + scans, and other events that require exclusive access to a shared resources). + :gl:`#3137` + Bug Fixes ~~~~~~~~~ diff --git a/lib/isc/task.c b/lib/isc/task.c index d0f9d9be38..666eb13fb2 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -1107,8 +1108,20 @@ isc_task_beginexclusive(isc_task_t *task) { return (ISC_R_LOCKBUSY); } + if (isc_log_wouldlog(isc_lctx, ISC_LOG_DEBUG(1))) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_OTHER, ISC_LOG_DEBUG(1), + "exclusive task mode: %s", "starting"); + } + isc_nm_pause(manager->netmgr); + if (isc_log_wouldlog(isc_lctx, ISC_LOG_DEBUG(1))) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_OTHER, ISC_LOG_DEBUG(1), + "exclusive task mode: %s", "started"); + } + return (ISC_R_SUCCESS); } @@ -1120,7 +1133,20 @@ isc_task_endexclusive(isc_task_t *task) { REQUIRE(task->state == task_state_running); manager = task->manager; + if (isc_log_wouldlog(isc_lctx, ISC_LOG_DEBUG(1))) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_OTHER, ISC_LOG_DEBUG(1), + "exclusive task mode: %s", "ending"); + } + isc_nm_resume(manager->netmgr); + + if (isc_log_wouldlog(isc_lctx, ISC_LOG_DEBUG(1))) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_OTHER, ISC_LOG_DEBUG(1), + "exclusive task mode: %s", "ended"); + } + REQUIRE(atomic_compare_exchange_strong(&manager->exclusive_req, &(bool){ true }, false)); }