summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/bind/lib/isc/task.c277
-rw-r--r--usr.sbin/bind/lib/isc/timer.c190
-rw-r--r--usr.sbin/bind/lib/isc/unix/app.c19
-rw-r--r--usr.sbin/bind/lib/isc/unix/socket.c19
4 files changed, 1 insertions, 504 deletions
diff --git a/usr.sbin/bind/lib/isc/task.c b/usr.sbin/bind/lib/isc/task.c
index afbdf7b5cc5..40b2af491fe 100644
--- a/usr.sbin/bind/lib/isc/task.c
+++ b/usr.sbin/bind/lib/isc/task.c
@@ -40,21 +40,6 @@
#include <isc/thread.h>
#include <isc/util.h>
-
-/*%
- * For BIND9 internal applications:
- * when built with threads we use multiple worker threads shared by the whole
- * application.
- * when built without threads we share a single global task manager and use
- * an integrated event loop for socket, timer, and other generic task events.
- * For generic library:
- * we don't use either of them: an application can have multiple task managers
- * whether or not it's threaded, and if the application is threaded each thread
- * is expected to have a separate manager; no "worker threads" are shared by
- * the application threads.
- */
-#define USE_SHARED_MANAGER
-
#include "task_p.h"
#ifdef ISC_TASK_TRACE
@@ -142,18 +127,14 @@ struct isc__taskmgr {
*/
isc_mutex_t excl_lock;
isc__task_t *excl;
-#ifdef USE_SHARED_MANAGER
unsigned int refs;
-#endif /* USE_SHARED_MANAGER */
};
#define DEFAULT_TASKMGR_QUANTUM 10
#define DEFAULT_DEFAULT_QUANTUM 5
#define FINISHED(m) ((m)->exiting && EMPTY((m)->tasks))
-#ifdef USE_SHARED_MANAGER
static isc__taskmgr_t *taskmgr = NULL;
-#endif /* USE_SHARED_MANAGER */
/*%
* The following are intended for internal use (indicated by "isc__"
@@ -292,17 +273,6 @@ task_finished(isc__task_t *task) {
LOCK(&manager->lock);
UNLINK(manager->tasks, task, link);
-#ifdef USE_WORKER_THREADS
- if (FINISHED(manager)) {
- /*
- * All tasks have completed and the
- * task manager is exiting. Wake up
- * any idle worker threads so they
- * can exit.
- */
- BROADCAST(&manager->work_available);
- }
-#endif /* USE_WORKER_THREADS */
UNLOCK(&manager->lock);
DESTROYLOCK(&task->lock);
@@ -438,9 +408,6 @@ task_shutdown(isc__task_t *task) {
static inline void
task_ready(isc__task_t *task) {
isc__taskmgr_t *manager = task->manager;
-#ifdef USE_WORKER_THREADS
- isc_boolean_t has_privilege = isc__task_privilege((isc_task_t *) task);
-#endif /* USE_WORKER_THREADS */
REQUIRE(VALID_MANAGER(manager));
REQUIRE(task->state == task_state_ready);
@@ -449,10 +416,6 @@ task_ready(isc__task_t *task) {
LOCK(&manager->lock);
push_readyq(manager, task);
-#ifdef USE_WORKER_THREADS
- if (manager->mode == isc_taskmgrmode_normal || has_privilege)
- SIGNAL(&manager->work_available);
-#endif /* USE_WORKER_THREADS */
UNLOCK(&manager->lock);
}
@@ -966,12 +929,10 @@ push_readyq(isc__taskmgr_t *manager, isc__task_t *task) {
static void
dispatch(isc__taskmgr_t *manager) {
isc__task_t *task;
-#ifndef USE_WORKER_THREADS
unsigned int total_dispatch_count = 0;
isc__tasklist_t new_ready_tasks;
isc__tasklist_t new_priority_tasks;
unsigned int tasks_ready = 0;
-#endif /* USE_WORKER_THREADS */
REQUIRE(VALID_MANAGER(manager));
@@ -1025,40 +986,14 @@ dispatch(isc__taskmgr_t *manager) {
* unlocks. The while expression is always protected by the lock.
*/
-#ifndef USE_WORKER_THREADS
ISC_LIST_INIT(new_ready_tasks);
ISC_LIST_INIT(new_priority_tasks);
-#endif
LOCK(&manager->lock);
while (!FINISHED(manager)) {
-#ifdef USE_WORKER_THREADS
- /*
- * For reasons similar to those given in the comment in
- * isc_task_send() above, it is safe for us to dequeue
- * the task while only holding the manager lock, and then
- * change the task to running state while only holding the
- * task lock.
- *
- * If a pause has been requested, don't do any work
- * until it's been released.
- */
- while ((empty_readyq(manager) || manager->pause_requested ||
- manager->exclusive_requested) && !FINISHED(manager))
- {
- XTHREADTRACE(isc_msgcat_get(isc_msgcat,
- ISC_MSGSET_GENERAL,
- ISC_MSG_WAIT, "wait"));
- WAIT(&manager->work_available, &manager->lock);
- XTHREADTRACE(isc_msgcat_get(isc_msgcat,
- ISC_MSGSET_TASK,
- ISC_MSG_AWAKE, "awake"));
- }
-#else /* USE_WORKER_THREADS */
if (total_dispatch_count >= DEFAULT_TASKMGR_QUANTUM ||
empty_readyq(manager))
break;
-#endif /* USE_WORKER_THREADS */
XTHREADTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_TASK,
ISC_MSG_WORKING, "working"));
@@ -1108,9 +1043,7 @@ dispatch(isc__taskmgr_t *manager) {
LOCK(&task->lock);
}
dispatch_count++;
-#ifndef USE_WORKER_THREADS
total_dispatch_count++;
-#endif /* USE_WORKER_THREADS */
}
if (task->references == 0 &&
@@ -1195,15 +1128,6 @@ dispatch(isc__taskmgr_t *manager) {
LOCK(&manager->lock);
manager->tasks_running--;
-#ifdef USE_WORKER_THREADS
- if (manager->exclusive_requested &&
- manager->tasks_running == 1) {
- SIGNAL(&manager->exclusive_granted);
- } else if (manager->pause_requested &&
- manager->tasks_running == 0) {
- SIGNAL(&manager->paused);
- }
-#endif /* USE_WORKER_THREADS */
if (requeue) {
/*
* We know we're awake, so we don't have
@@ -1224,72 +1148,30 @@ dispatch(isc__taskmgr_t *manager) {
* were usually nonempty, the 'optimization'
* might even hurt rather than help.
*/
-#ifdef USE_WORKER_THREADS
- push_readyq(manager, task);
-#else
ENQUEUE(new_ready_tasks, task, ready_link);
if ((task->flags & TASK_F_PRIVILEGED) != 0)
ENQUEUE(new_priority_tasks, task,
ready_priority_link);
tasks_ready++;
-#endif
}
}
-#ifdef USE_WORKER_THREADS
- /*
- * If we are in privileged execution mode and there are no
- * tasks remaining on the current ready queue, then
- * we're stuck. Automatically drop privileges at that
- * point and continue with the regular ready queue.
- */
- if (manager->tasks_running == 0 && empty_readyq(manager)) {
- manager->mode = isc_taskmgrmode_normal;
- if (!empty_readyq(manager))
- BROADCAST(&manager->work_available);
- }
-#endif
}
-#ifndef USE_WORKER_THREADS
ISC_LIST_APPENDLIST(manager->ready_tasks, new_ready_tasks, ready_link);
ISC_LIST_APPENDLIST(manager->ready_priority_tasks, new_priority_tasks,
ready_priority_link);
manager->tasks_ready += tasks_ready;
if (empty_readyq(manager))
manager->mode = isc_taskmgrmode_normal;
-#endif
UNLOCK(&manager->lock);
}
-#ifdef USE_WORKER_THREADS
-static isc_threadresult_t
-run(void *uap) {
- isc__taskmgr_t *manager = uap;
-
- XTHREADTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_STARTING, "starting"));
-
- dispatch(manager);
-
- XTHREADTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_EXITING, "exiting"));
-
- return ((isc_threadresult_t)0);
-}
-#endif /* USE_WORKER_THREADS */
-
static void
manager_free(isc__taskmgr_t *manager) {
isc_mem_t *mctx;
-#ifdef USE_WORKER_THREADS
- (void)isc_condition_destroy(&manager->exclusive_granted);
- (void)isc_condition_destroy(&manager->work_available);
- (void)isc_condition_destroy(&manager->paused);
- isc_mem_free(manager->mctx, manager->threads);
-#endif /* USE_WORKER_THREADS */
DESTROYLOCK(&manager->lock);
DESTROYLOCK(&manager->excl_lock);
manager->common.impmagic = 0;
@@ -1298,9 +1180,7 @@ manager_free(isc__taskmgr_t *manager) {
isc_mem_put(mctx, manager, sizeof(*manager));
isc_mem_detach(&mctx);
-#ifdef USE_SHARED_MANAGER
taskmgr = NULL;
-#endif /* USE_SHARED_MANAGER */
}
isc_result_t
@@ -1318,12 +1198,9 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
REQUIRE(workers > 0);
REQUIRE(managerp != NULL && *managerp == NULL);
-#ifndef USE_WORKER_THREADS
UNUSED(i);
UNUSED(started);
-#endif
-#ifdef USE_SHARED_MANAGER
if (taskmgr != NULL) {
if (taskmgr->refs == 0)
return (ISC_R_SHUTTINGDOWN);
@@ -1331,7 +1208,6 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
*managerp = (isc_taskmgr_t *)taskmgr;
return (ISC_R_SUCCESS);
}
-#endif /* USE_SHARED_MANAGER */
manager = isc_mem_get(mctx, sizeof(*manager));
if (manager == NULL)
@@ -1350,39 +1226,6 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
goto cleanup_mgr;
}
-#ifdef USE_WORKER_THREADS
- manager->workers = 0;
- manager->threads = isc_mem_allocate(mctx,
- workers * sizeof(isc_thread_t));
- if (manager->threads == NULL) {
- result = ISC_R_NOMEMORY;
- goto cleanup_lock;
- }
- if (isc_condition_init(&manager->work_available) != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_condition_init() %s",
- isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "failed"));
- result = ISC_R_UNEXPECTED;
- goto cleanup_threads;
- }
- if (isc_condition_init(&manager->exclusive_granted) != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_condition_init() %s",
- isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "failed"));
- result = ISC_R_UNEXPECTED;
- goto cleanup_workavailable;
- }
- if (isc_condition_init(&manager->paused) != ISC_R_SUCCESS) {
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_condition_init() %s",
- isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "failed"));
- result = ISC_R_UNEXPECTED;
- goto cleanup_exclusivegranted;
- }
-#endif /* USE_WORKER_THREADS */
if (default_quantum == 0)
default_quantum = DEFAULT_DEFAULT_QUANTUM;
manager->default_quantum = default_quantum;
@@ -1398,50 +1241,13 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
isc_mem_attach(mctx, &manager->mctx);
-#ifdef USE_WORKER_THREADS
- LOCK(&manager->lock);
- /*
- * Start workers.
- */
- for (i = 0; i < workers; i++) {
- if (isc_thread_create(run, manager,
- &manager->threads[manager->workers]) ==
- ISC_R_SUCCESS) {
- char name[16]; /* thread name limit on Linux */
- snprintf(name, sizeof(name), "isc-worker%04u", i);
- isc_thread_setname(manager->threads[manager->workers],
- name);
- manager->workers++;
- started++;
- }
- }
- UNLOCK(&manager->lock);
-
- if (started == 0) {
- manager_free(manager);
- return (ISC_R_NOTHREADS);
- }
- isc_thread_setconcurrency(workers);
-#endif /* USE_WORKER_THREADS */
-#ifdef USE_SHARED_MANAGER
manager->refs = 1;
taskmgr = manager;
-#endif /* USE_SHARED_MANAGER */
*managerp = (isc_taskmgr_t *)manager;
return (ISC_R_SUCCESS);
-#ifdef USE_WORKER_THREADS
- cleanup_exclusivegranted:
- (void)isc_condition_destroy(&manager->exclusive_granted);
- cleanup_workavailable:
- (void)isc_condition_destroy(&manager->work_available);
- cleanup_threads:
- isc_mem_free(mctx, manager->threads);
- cleanup_lock:
- DESTROYLOCK(&manager->lock);
-#endif
cleanup_mgr:
isc_mem_put(mctx, manager, sizeof(*manager));
return (result);
@@ -1461,17 +1267,13 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
manager = (isc__taskmgr_t *)*managerp;
REQUIRE(VALID_MANAGER(manager));
-#ifndef USE_WORKER_THREADS
UNUSED(i);
-#endif /* USE_WORKER_THREADS */
-#ifdef USE_SHARED_MANAGER
manager->refs--;
if (manager->refs > 0) {
*managerp = NULL;
return;
}
-#endif
XTHREADTRACE("isc_taskmgr_destroy");
/*
@@ -1524,21 +1326,6 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
push_readyq(manager, task);
UNLOCK(&task->lock);
}
-#ifdef USE_WORKER_THREADS
- /*
- * Wake up any sleeping workers. This ensures we get work done if
- * there's work left to do, and if there are already no tasks left
- * it will cause the workers to see manager->exiting.
- */
- BROADCAST(&manager->work_available);
- UNLOCK(&manager->lock);
-
- /*
- * Wait for all the worker threads to exit.
- */
- for (i = 0; i < manager->workers; i++)
- (void)isc_thread_join(manager->threads[i], NULL);
-#else /* USE_WORKER_THREADS */
/*
* Dispatch the shutdown events.
*/
@@ -1548,10 +1335,7 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
if (!ISC_LIST_EMPTY(manager->tasks))
isc_mem_printallactive(stderr);
INSIST(ISC_LIST_EMPTY(manager->tasks));
-#ifdef USE_SHARED_MANAGER
taskmgr = NULL;
-#endif
-#endif /* USE_WORKER_THREADS */
manager_free(manager);
@@ -1577,16 +1361,13 @@ isc__taskmgr_mode(isc_taskmgr_t *manager0) {
return (mode);
}
-#ifndef USE_WORKER_THREADS
isc_boolean_t
isc__taskmgr_ready(isc_taskmgr_t *manager0) {
isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
isc_boolean_t is_ready;
-#ifdef USE_SHARED_MANAGER
if (manager == NULL)
manager = taskmgr;
-#endif
if (manager == NULL)
return (ISC_FALSE);
@@ -1601,10 +1382,8 @@ isc_result_t
isc__taskmgr_dispatch(isc_taskmgr_t *manager0) {
isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
-#ifdef USE_SHARED_MANAGER
if (manager == NULL)
manager = taskmgr;
-#endif
if (manager == NULL)
return (ISC_R_NOTFOUND);
@@ -1613,31 +1392,6 @@ isc__taskmgr_dispatch(isc_taskmgr_t *manager0) {
return (ISC_R_SUCCESS);
}
-#else
-void
-isc__taskmgr_pause(isc_taskmgr_t *manager0) {
- isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
- manager->pause_requested = ISC_TRUE;
- LOCK(&manager->lock);
- while (manager->tasks_running > 0) {
- WAIT(&manager->paused, &manager->lock);
- }
- UNLOCK(&manager->lock);
-}
-
-void
-isc__taskmgr_resume(isc_taskmgr_t *manager0) {
- isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
-
- LOCK(&manager->lock);
- if (manager->pause_requested) {
- manager->pause_requested = ISC_FALSE;
- BROADCAST(&manager->work_available);
- }
- UNLOCK(&manager->lock);
-}
-#endif /* USE_WORKER_THREADS */
-
void
isc_taskmgr_setexcltask(isc_taskmgr_t *mgr0, isc_task_t *task0) {
isc__taskmgr_t *mgr = (isc__taskmgr_t *) mgr0;
@@ -1672,44 +1426,13 @@ isc_taskmgr_excltask(isc_taskmgr_t *mgr0, isc_task_t **taskp) {
isc_result_t
isc__task_beginexclusive(isc_task_t *task0) {
-#ifdef USE_WORKER_THREADS
- isc__task_t *task = (isc__task_t *)task0;
- isc__taskmgr_t *manager = task->manager;
-
- REQUIRE(task->state == task_state_running);
- /* XXX: Require task == manager->excl? */
-
- LOCK(&manager->lock);
- if (manager->exclusive_requested) {
- UNLOCK(&manager->lock);
- return (ISC_R_LOCKBUSY);
- }
- manager->exclusive_requested = ISC_TRUE;
- while (manager->tasks_running > 1) {
- WAIT(&manager->exclusive_granted, &manager->lock);
- }
- UNLOCK(&manager->lock);
-#else
UNUSED(task0);
-#endif
return (ISC_R_SUCCESS);
}
void
isc__task_endexclusive(isc_task_t *task0) {
-#ifdef USE_WORKER_THREADS
- isc__task_t *task = (isc__task_t *)task0;
- isc__taskmgr_t *manager = task->manager;
-
- REQUIRE(task->state == task_state_running);
- LOCK(&manager->lock);
- REQUIRE(manager->exclusive_requested);
- manager->exclusive_requested = ISC_FALSE;
- BROADCAST(&manager->work_available);
- UNLOCK(&manager->lock);
-#else
UNUSED(task0);
-#endif
}
void
diff --git a/usr.sbin/bind/lib/isc/timer.c b/usr.sbin/bind/lib/isc/timer.c
index c79d958000e..2272b1bac8b 100644
--- a/usr.sbin/bind/lib/isc/timer.c
+++ b/usr.sbin/bind/lib/isc/timer.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: timer.c,v 1.9 2020/01/09 18:17:19 florian Exp $ */
+/* $Id: timer.c,v 1.10 2020/01/20 18:45:29 florian Exp $ */
/*! \file */
@@ -36,12 +36,7 @@
#include <isc/timer.h>
#include <isc/util.h>
-/* See task.c about the following definition: */
-#define USE_SHARED_MANAGER
-
-#ifndef USE_TIMER_THREAD
#include "timer_p.h"
-#endif /* USE_TIMER_THREAD */
#ifdef ISC_TIMER_TRACE
#define XTRACE(s) fprintf(stderr, "%s\n", (s))
@@ -99,13 +94,7 @@ struct isc__timermgr {
LIST(isc__timer_t) timers;
unsigned int nscheduled;
isc_time_t due;
-#ifdef USE_TIMER_THREAD
- isc_condition_t wakeup;
- isc_thread_t thread;
-#endif /* USE_TIMER_THREAD */
-#ifdef USE_SHARED_MANAGER
unsigned int refs;
-#endif /* USE_SHARED_MANAGER */
isc_heap_t * heap;
};
@@ -167,12 +156,10 @@ static struct isc__timermgrmethods {
(void *)isc_timermgr_poke
};
-#ifdef USE_SHARED_MANAGER
/*!
* If the manager is supposed to be shared, there can be only one.
*/
static isc__timermgr_t *timermgr = NULL;
-#endif /* USE_SHARED_MANAGER */
static inline isc_result_t
schedule(isc__timer_t *timer, isc_time_t *now, isc_boolean_t signal_ok) {
@@ -180,9 +167,6 @@ schedule(isc__timer_t *timer, isc_time_t *now, isc_boolean_t signal_ok) {
isc__timermgr_t *manager;
isc_time_t due;
int cmp;
-#ifdef USE_TIMER_THREAD
- isc_boolean_t timedwait;
-#endif
/*!
* Note: the caller must ensure locking.
@@ -190,21 +174,10 @@ schedule(isc__timer_t *timer, isc_time_t *now, isc_boolean_t signal_ok) {
REQUIRE(timer->type != isc_timertype_inactive);
-#ifndef USE_TIMER_THREAD
UNUSED(signal_ok);
-#endif /* USE_TIMER_THREAD */
manager = timer->manager;
-#ifdef USE_TIMER_THREAD
- /*!
- * If the manager was timed wait, we may need to signal the
- * manager to force a wakeup.
- */
- timedwait = ISC_TF(manager->nscheduled > 0 &&
- isc_time_seconds(&manager->due) != 0);
-#endif
-
/*
* Compute the new due time.
*/
@@ -266,53 +239,15 @@ schedule(isc__timer_t *timer, isc_time_t *now, isc_boolean_t signal_ok) {
* the current "next" timer. We do this either by waking up the
* run thread, or explicitly setting the value in the manager.
*/
-#ifdef USE_TIMER_THREAD
-
- /*
- * This is a temporary (probably) hack to fix a bug on tru64 5.1
- * and 5.1a. Sometimes, pthread_cond_timedwait() doesn't actually
- * return when the time expires, so here, we check to see if
- * we're 15 seconds or more behind, and if we are, we signal
- * the dispatcher. This isn't such a bad idea as a general purpose
- * watchdog, so perhaps we should just leave it in here.
- */
- if (signal_ok && timedwait) {
- interval_t fifteen;
- isc_time_t then;
-
- interval_set(&fifteen, 15, 0);
- result = isc_time_add(&manager->due, &fifteen, &then);
-
- if (result == ISC_R_SUCCESS &&
- isc_time_compare(&then, now) < 0) {
- SIGNAL(&manager->wakeup);
- signal_ok = ISC_FALSE;
- isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
- ISC_LOGMODULE_TIMER, ISC_LOG_WARNING,
- "*** POKED TIMER ***");
- }
- }
-
- if (timer->index == 1 && signal_ok) {
- XTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_TIMER,
- ISC_MSG_SIGNALSCHED,
- "signal (schedule)"));
- SIGNAL(&manager->wakeup);
- }
-#else /* USE_TIMER_THREAD */
if (timer->index == 1 &&
isc_time_compare(&timer->due, &manager->due) < 0)
manager->due = timer->due;
-#endif /* USE_TIMER_THREAD */
return (ISC_R_SUCCESS);
}
static inline void
deschedule(isc__timer_t *timer) {
-#ifdef USE_TIMER_THREAD
- isc_boolean_t need_wakeup = ISC_FALSE;
-#endif
isc__timermgr_t *manager;
/*
@@ -321,22 +256,10 @@ deschedule(isc__timer_t *timer) {
manager = timer->manager;
if (timer->index > 0) {
-#ifdef USE_TIMER_THREAD
- if (timer->index == 1)
- need_wakeup = ISC_TRUE;
-#endif
isc_heap_delete(manager->heap, timer->index);
timer->index = 0;
INSIST(manager->nscheduled > 0);
manager->nscheduled--;
-#ifdef USE_TIMER_THREAD
- if (need_wakeup) {
- XTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_TIMER,
- ISC_MSG_SIGNALDESCHED,
- "signal (deschedule)"));
- SIGNAL(&manager->wakeup);
- }
-#endif /* USE_TIMER_THREAD */
}
}
@@ -773,46 +696,6 @@ dispatch(isc__timermgr_t *manager, isc_time_t *now) {
}
}
-#ifdef USE_TIMER_THREAD
-static isc_threadresult_t
-run(void *uap) {
- isc__timermgr_t *manager = uap;
- isc_time_t now;
- isc_result_t result;
-
- LOCK(&manager->lock);
- while (!manager->done) {
- TIME_NOW(&now);
-
- XTRACETIME(isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_RUNNING,
- "running"), now);
-
- dispatch(manager, &now);
-
- if (manager->nscheduled > 0) {
- XTRACETIME2(isc_msgcat_get(isc_msgcat,
- ISC_MSGSET_GENERAL,
- ISC_MSG_WAITUNTIL,
- "waituntil"),
- manager->due, now);
- result = WAITUNTIL(&manager->wakeup, &manager->lock, &manager->due);
- INSIST(result == ISC_R_SUCCESS ||
- result == ISC_R_TIMEDOUT);
- } else {
- XTRACETIME(isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_WAIT, "wait"), now);
- WAIT(&manager->wakeup, &manager->lock);
- }
- XTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_TIMER,
- ISC_MSG_WAKEUP, "wakeup"));
- }
- UNLOCK(&manager->lock);
-
- return ((isc_threadresult_t)0);
-}
-#endif /* USE_TIMER_THREAD */
-
static isc_boolean_t
sooner(void *v1, void *v2) {
isc__timer_t *t1, *t2;
@@ -848,13 +731,11 @@ isc__timermgr_create(isc_mem_t *mctx, isc_timermgr_t **managerp) {
REQUIRE(managerp != NULL && *managerp == NULL);
-#ifdef USE_SHARED_MANAGER
if (timermgr != NULL) {
timermgr->refs++;
*managerp = (isc_timermgr_t *)timermgr;
return (ISC_R_SUCCESS);
}
-#endif /* USE_SHARED_MANAGER */
manager = isc_mem_get(mctx, sizeof(*manager));
if (manager == NULL)
@@ -882,37 +763,8 @@ isc__timermgr_create(isc_mem_t *mctx, isc_timermgr_t **managerp) {
return (result);
}
isc_mem_attach(mctx, &manager->mctx);
-#ifdef USE_TIMER_THREAD
- if (isc_condition_init(&manager->wakeup) != ISC_R_SUCCESS) {
- isc_mem_detach(&manager->mctx);
- DESTROYLOCK(&manager->lock);
- isc_heap_destroy(&manager->heap);
- isc_mem_put(mctx, manager, sizeof(*manager));
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_condition_init() %s",
- isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "failed"));
- return (ISC_R_UNEXPECTED);
- }
- if (isc_thread_create(run, manager, &manager->thread) !=
- ISC_R_SUCCESS) {
- isc_mem_detach(&manager->mctx);
- (void)isc_condition_destroy(&manager->wakeup);
- DESTROYLOCK(&manager->lock);
- isc_heap_destroy(&manager->heap);
- isc_mem_put(mctx, manager, sizeof(*manager));
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_thread_create() %s",
- isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "failed"));
- return (ISC_R_UNEXPECTED);
- }
- isc_thread_setname(manager->thread, "isc-timer");
-#endif
-#ifdef USE_SHARED_MANAGER
manager->refs = 1;
timermgr = manager;
-#endif /* USE_SHARED_MANAGER */
*managerp = (isc_timermgr_t *)manager;
@@ -921,15 +773,7 @@ isc__timermgr_create(isc_mem_t *mctx, isc_timermgr_t **managerp) {
void
isc_timermgr_poke(isc_timermgr_t *manager0) {
-#ifdef USE_TIMER_THREAD
- isc__timermgr_t *manager = (isc__timermgr_t *)manager0;
-
- REQUIRE(VALID_MANAGER(manager));
-
- SIGNAL(&manager->wakeup);
-#else
UNUSED(manager0);
-#endif
}
void
@@ -947,7 +791,6 @@ isc__timermgr_destroy(isc_timermgr_t **managerp) {
LOCK(&manager->lock);
-#ifdef USE_SHARED_MANAGER
manager->refs--;
if (manager->refs > 0) {
UNLOCK(&manager->lock);
@@ -955,40 +798,17 @@ isc__timermgr_destroy(isc_timermgr_t **managerp) {
return;
}
timermgr = NULL;
-#endif /* USE_SHARED_MANAGER */
-#ifndef USE_TIMER_THREAD
isc__timermgr_dispatch((isc_timermgr_t *)manager);
-#endif
REQUIRE(EMPTY(manager->timers));
manager->done = ISC_TRUE;
-#ifdef USE_TIMER_THREAD
- XTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_TIMER,
- ISC_MSG_SIGNALDESTROY, "signal (destroy)"));
- SIGNAL(&manager->wakeup);
-#endif /* USE_TIMER_THREAD */
-
UNLOCK(&manager->lock);
-#ifdef USE_TIMER_THREAD
- /*
- * Wait for thread to exit.
- */
- if (isc_thread_join(manager->thread, NULL) != ISC_R_SUCCESS)
- UNEXPECTED_ERROR(__FILE__, __LINE__,
- "isc_thread_join() %s",
- isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
- ISC_MSG_FAILED, "failed"));
-#endif /* USE_TIMER_THREAD */
-
/*
* Clean up.
*/
-#ifdef USE_TIMER_THREAD
- (void)isc_condition_destroy(&manager->wakeup);
-#endif /* USE_TIMER_THREAD */
DESTROYLOCK(&manager->lock);
isc_heap_destroy(&manager->heap);
manager->common.impmagic = 0;
@@ -999,20 +819,15 @@ isc__timermgr_destroy(isc_timermgr_t **managerp) {
*managerp = NULL;
-#ifdef USE_SHARED_MANAGER
timermgr = NULL;
-#endif
}
-#ifndef USE_TIMER_THREAD
isc_result_t
isc__timermgr_nextevent(isc_timermgr_t *manager0, isc_time_t *when) {
isc__timermgr_t *manager = (isc__timermgr_t *)manager0;
-#ifdef USE_SHARED_MANAGER
if (manager == NULL)
manager = timermgr;
-#endif
if (manager == NULL || manager->nscheduled == 0)
return (ISC_R_NOTFOUND);
*when = manager->due;
@@ -1024,16 +839,13 @@ isc__timermgr_dispatch(isc_timermgr_t *manager0) {
isc__timermgr_t *manager = (isc__timermgr_t *)manager0;
isc_time_t now;
-#ifdef USE_SHARED_MANAGER
if (manager == NULL)
manager = timermgr;
-#endif
if (manager == NULL)
return;
TIME_NOW(&now);
dispatch(manager, &now);
}
-#endif /* USE_TIMER_THREAD */
isc_result_t
isc__timer_register(void) {
diff --git a/usr.sbin/bind/lib/isc/unix/app.c b/usr.sbin/bind/lib/isc/unix/app.c
index 6d53fe11999..41a40bf537e 100644
--- a/usr.sbin/bind/lib/isc/unix/app.c
+++ b/usr.sbin/bind/lib/isc/unix/app.c
@@ -145,20 +145,6 @@ static struct {
(void *)isc__app_unblock
};
-#ifdef HAVE_LINUXTHREADS
-/*!
- * Linux has sigwait(), but it appears to prevent signal handlers from
- * running, even if they're not in the set being waited for. This makes
- * it impossible to get the default actions for SIGILL, SIGSEGV, etc.
- * Instead of messing with it, we just use sigsuspend() instead.
- */
-#undef HAVE_SIGWAIT
-/*!
- * We need to remember which thread is the main thread...
- */
-static pthread_t main_thread;
-#endif
-
#ifndef HAVE_SIGWAIT
static void
exit_action(int arg) {
@@ -515,11 +501,6 @@ isc__app_ctxrun(isc_appctx_t *ctx0) {
isc_task_t *task;
REQUIRE(VALID_APPCTX(ctx));
-
-#ifdef HAVE_LINUXTHREADS
- REQUIRE(main_thread == pthread_self());
-#endif
-
LOCK(&ctx->lock);
if (!ctx->running) {
diff --git a/usr.sbin/bind/lib/isc/unix/socket.c b/usr.sbin/bind/lib/isc/unix/socket.c
index b86f62990e8..0055e88d782 100644
--- a/usr.sbin/bind/lib/isc/unix/socket.c
+++ b/usr.sbin/bind/lib/isc/unix/socket.c
@@ -71,9 +71,6 @@
#include "errno2result.h"
-/* See task.c about the following definition: */
-#define USE_SHARED_MANAGER
-
#include "socket_p.h"
#include "../task_p.h"
@@ -392,9 +389,7 @@ struct isc__socketmgr {
int maxudp;
};
-#ifdef USE_SHARED_MANAGER
static isc__socketmgr_t *socketmgr = NULL;
-#endif /* USE_SHARED_MANAGER */
#define CLOSED 0 /* this one must be zero */
#define MANAGED 1
@@ -3706,7 +3701,6 @@ isc__socketmgr_create2(isc_mem_t *mctx, isc_socketmgr_t **managerp,
REQUIRE(managerp != NULL && *managerp == NULL);
-#ifdef USE_SHARED_MANAGER
if (socketmgr != NULL) {
/* Don't allow maxsocks to be updated */
if (maxsocks > 0 && socketmgr->maxsocks != maxsocks)
@@ -3716,7 +3710,6 @@ isc__socketmgr_create2(isc_mem_t *mctx, isc_socketmgr_t **managerp,
*managerp = (isc_socketmgr_t *)socketmgr;
return (ISC_R_SUCCESS);
}
-#endif /* USE_SHARED_MANAGER */
if (maxsocks == 0)
maxsocks = ISC_SOCKET_MAXSOCKETS;
@@ -3777,9 +3770,7 @@ isc__socketmgr_create2(isc_mem_t *mctx, isc_socketmgr_t **managerp,
}
}
-#ifdef USE_SHARED_MANAGER
manager->refs = 1;
-#endif /* USE_SHARED_MANAGER */
/*
* Set up initial state for the select loop
@@ -3792,9 +3783,7 @@ isc__socketmgr_create2(isc_mem_t *mctx, isc_socketmgr_t **managerp,
isc_mem_attach(mctx, &manager->mctx);
-#ifdef USE_SHARED_MANAGER
socketmgr = manager;
-#endif /* USE_SHARED_MANAGER */
*managerp = (isc_socketmgr_t *)manager;
return (ISC_R_SUCCESS);
@@ -3858,14 +3847,12 @@ isc__socketmgr_destroy(isc_socketmgr_t **managerp) {
manager = (isc__socketmgr_t *)*managerp;
REQUIRE(VALID_MANAGER(manager));
-#ifdef USE_SHARED_MANAGER
manager->refs--;
if (manager->refs > 0) {
*managerp = NULL;
return;
}
socketmgr = NULL;
-#endif /* USE_SHARED_MANAGER */
LOCK(&manager->lock);
@@ -3921,9 +3908,7 @@ isc__socketmgr_destroy(isc_socketmgr_t **managerp) {
*managerp = NULL;
-#ifdef USE_SHARED_MANAGER
socketmgr = NULL;
-#endif
}
static isc_result_t
@@ -5298,10 +5283,8 @@ isc__socketmgr_waitevents(isc_socketmgr_t *manager0, struct timeval *tvp,
REQUIRE(swaitp != NULL && *swaitp == NULL);
-#ifdef USE_SHARED_MANAGER
if (manager == NULL)
manager = socketmgr;
-#endif
if (manager == NULL)
return (0);
@@ -5348,10 +5331,8 @@ isc__socketmgr_dispatch(isc_socketmgr_t *manager0, isc_socketwait_t *swait) {
REQUIRE(swait == &swait_private);
-#ifdef USE_SHARED_MANAGER
if (manager == NULL)
manager = socketmgr;
-#endif
if (manager == NULL)
return (ISC_R_NOTFOUND);