Lines Matching defs:manager
56 * Task manager is built around 'as little locking as possible' concept.
104 isc_taskmgr_t *manager;
124 /* Locked by task manager lock. */
143 /* Locked by task manager lock. */
173 isc_taskmgr_t *manager = task->manager;
174 isc_mem_t *mctx = manager->mctx;
185 LOCK(&manager->lock);
186 UNLINK(manager->tasks, task, link);
187 atomic_fetch_sub(&manager->tasks_count, 1);
188 UNLOCK(&manager->lock);
194 isc_taskmgr_detach(&manager);
198 isc_task_create(isc_taskmgr_t *manager, unsigned int quantum,
200 return (isc_task_create_bound(manager, quantum, taskp, -1));
204 isc_task_create_bound(isc_taskmgr_t *manager, unsigned int quantum,
209 REQUIRE(VALID_MANAGER(manager));
214 task = isc_mem_get(manager->mctx, sizeof(*task));
217 isc_taskmgr_attach(manager, &task->manager);
245 task->quantum = (quantum > 0) ? quantum : manager->default_quantum;
255 LOCK(&manager->lock);
256 exiting = manager->exiting;
258 APPEND(manager->tasks, task, link);
259 atomic_fetch_add(&manager->tasks_count, 1);
261 UNLOCK(&manager->lock);
268 isc_taskmgr_detach(&task->manager);
269 isc_mem_put(manager->mctx, task, sizeof(*task));
342 isc_taskmgr_t *manager = task->manager;
343 REQUIRE(VALID_MANAGER(manager));
349 isc_nm_task_enqueue(manager->netmgr, task, task->threadid);
487 * ready requires locking the manager. If we tried to do
699 event = isc_event_allocate(task->manager->mctx, NULL,
713 isc_mem_put(task->manager->mctx, event, sizeof(*event));
802 return (task->manager->netmgr);
811 : task->manager->default_quantum;
816 *** Task Manager.
959 manager_free(isc_taskmgr_t *manager) {
960 isc_refcount_destroy(&manager->references);
961 isc_nm_detach(&manager->netmgr);
963 isc_mutex_destroy(&manager->lock);
964 manager->magic = 0;
965 isc_mem_putanddetach(&manager->mctx, manager, sizeof(*manager));
983 isc_taskmgr_t *manager = *managerp;
986 if (isc_refcount_decrement(&manager->references) == 1) {
987 manager_free(manager);
994 isc_taskmgr_t *manager;
997 * Create a new task manager.
1003 manager = isc_mem_get(mctx, sizeof(*manager));
1004 *manager = (isc_taskmgr_t){ .magic = TASK_MANAGER_MAGIC };
1006 isc_mutex_init(&manager->lock);
1011 manager->default_quantum = default_quantum;
1014 isc_nm_attach(nm, &manager->netmgr);
1017 INIT_LIST(manager->tasks);
1018 atomic_init(&manager->mode, isc_taskmgrmode_normal);
1019 atomic_init(&manager->exclusive_req, false);
1020 atomic_init(&manager->tasks_count, 0);
1022 isc_mem_attach(mctx, &manager->mctx);
1024 isc_refcount_init(&manager->references, 1);
1026 *managerp = manager;
1032 isc__taskmgr_shutdown(isc_taskmgr_t *manager) {
1035 REQUIRE(VALID_MANAGER(manager));
1041 * task manager, it should ask some non-worker thread to call
1052 * task manager lock and a task lock at the same time.
1054 LOCK(&manager->lock);
1055 if (manager->excl != NULL) {
1056 isc_task_detach((isc_task_t **)&manager->excl);
1062 INSIST(manager->exiting == false);
1063 manager->exiting = true;
1069 for (task = HEAD(manager->tasks); task != NULL; task = NEXT(task, link))
1085 UNLOCK(&manager->lock);
1150 isc_taskmgr_t *manager;
1154 manager = task->manager;
1158 LOCK(&manager->lock);
1159 REQUIRE(task == manager->excl ||
1160 (manager->exiting && manager->excl == NULL));
1161 UNLOCK(&manager->lock);
1163 if (!atomic_compare_exchange_strong(&manager->exclusive_req,
1175 isc_nm_pause(manager->netmgr);
1188 isc_taskmgr_t *manager;
1192 manager = task->manager;
1200 isc_nm_resume(manager->netmgr);
1208 REQUIRE(atomic_compare_exchange_strong(&manager->exclusive_req,
1272 isc_taskmgr_setmode(isc_taskmgr_t *manager, isc_taskmgrmode_t mode) {
1273 atomic_store(&manager->mode, mode);
1277 isc_taskmgr_mode(isc_taskmgr_t *manager) {
1278 return (atomic_load(&manager->mode));
1299 return (isc_taskmgr_mode(task->manager) && TASK_PRIVILEGED(task));