Lines Matching defs:manager

72 	isc__timermgr_t *		manager;
77 /*! Locked by manager lock. */
97 /* Locked by manager lock. */
119 isc__timer_create(isc_timermgr_t *manager, isc_timertype_t type,
172 * If the manager is supposed to be shared, there can be only one.
180 isc__timermgr_t *manager;
197 manager = timer->manager;
201 * If the manager was timed wait, we may need to signal the
202 * manager to force a wakeup.
204 timedwait = ISC_TF(manager->nscheduled > 0 &&
205 isc_time_seconds(&manager->due) != 0);
241 isc_heap_increased(manager->heap, timer->index);
244 isc_heap_decreased(manager->heap, timer->index);
252 result = isc_heap_insert(manager->heap, timer);
257 manager->nscheduled++;
267 * run thread, or explicitly setting the value in the manager.
284 result = isc_time_add(&manager->due, &fifteen, &then);
288 SIGNAL(&manager->wakeup);
300 SIGNAL(&manager->wakeup);
304 isc_time_compare(&timer->due, &manager->due) < 0)
305 manager->due = timer->due;
316 isc__timermgr_t *manager;
322 manager = timer->manager;
328 isc_heap_delete(manager->heap, timer->index);
330 INSIST(manager->nscheduled > 0);
331 manager->nscheduled--;
337 SIGNAL(&manager->wakeup);
345 isc__timermgr_t *manager = timer->manager;
351 LOCK(&manager->lock);
359 UNLINK(manager->timers, timer, link);
361 UNLOCK(&manager->lock);
367 isc_mem_put(manager->mctx, timer, sizeof(*timer));
376 isc__timermgr_t *manager = (isc__timermgr_t *)manager0;
382 * Create a new 'type' timer managed by 'manager'. The timers
389 REQUIRE(VALID_MANAGER(manager));
417 timer = isc_mem_get(manager->mctx, sizeof(*timer));
421 timer->manager = manager;
427 isc_mem_put(manager->mctx, timer, sizeof(*timer));
454 isc_mem_put(manager->mctx, timer, sizeof(*timer));
462 LOCK(&manager->lock);
474 APPEND(manager->timers, timer, link);
476 UNLOCK(&manager->lock);
483 isc_mem_put(manager->mctx, timer, sizeof(*timer));
499 isc__timermgr_t *manager;
509 manager = timer->manager;
510 REQUIRE(VALID_MANAGER(manager));
535 LOCK(&manager->lock);
563 UNLOCK(&manager->lock);
601 * but we cannot without locking the manager lock too, which we
658 dispatch(isc__timermgr_t *manager, isc_time_t *now) {
667 * The caller must be holding the manager lock.
670 while (manager->nscheduled > 0 && !done) {
671 timer = isc_heap_element(manager->heap, 1);
733 event = (isc_timerevent_t *)isc_event_allocate(manager->mctx,
754 isc_heap_delete(manager->heap, 1);
755 manager->nscheduled--;
770 manager->due = timer->due;
782 isc__timermgr_t *manager = uap;
786 LOCK(&manager->lock);
787 while (!manager->done) {
794 dispatch(manager, &now);
796 if (manager->nscheduled > 0) {
801 manager->due, now);
802 result = WAITUNTIL(&manager->wakeup, &manager->lock, &manager->due);
808 WAIT(&manager->wakeup, &manager->lock);
813 UNLOCK(&manager->lock);
849 isc__timermgr_t *manager;
853 * Create a timer manager.
866 manager = isc_mem_get(mctx, sizeof(*manager));
867 if (manager == NULL)
870 manager->common.impmagic = TIMER_MANAGER_MAGIC;
871 manager->common.magic = ISCAPI_TIMERMGR_MAGIC;
872 manager->common.methods = (isc_timermgrmethods_t *)&timermgrmethods;
873 manager->mctx = NULL;
874 manager->done = ISC_FALSE;
875 INIT_LIST(manager->timers);
876 manager->nscheduled = 0;
877 isc_time_settoepoch(&manager->due);
878 manager->heap = NULL;
879 result = isc_heap_create(mctx, sooner, set_index, 0, &manager->heap);
882 isc_mem_put(mctx, manager, sizeof(*manager));
885 result = isc_mutex_init(&manager->lock);
887 isc_heap_destroy(&manager->heap);
888 isc_mem_put(mctx, manager, sizeof(*manager));
891 isc_mem_attach(mctx, &manager->mctx);
893 if (isc_condition_init(&manager->wakeup) != ISC_R_SUCCESS) {
894 isc_mem_detach(&manager->mctx);
895 DESTROYLOCK(&manager->lock);
896 isc_heap_destroy(&manager->heap);
897 isc_mem_put(mctx, manager, sizeof(*manager));
904 if (isc_thread_create(run, manager, &manager->thread) !=
906 isc_mem_detach(&manager->mctx);
907 (void)isc_condition_destroy(&manager->wakeup);
908 DESTROYLOCK(&manager->lock);
909 isc_heap_destroy(&manager->heap);
910 isc_mem_put(mctx, manager, sizeof(*manager));
917 isc_thread_setname(manager->thread, "isc-timer");
920 manager->refs = 1;
921 timermgr = manager;
924 *managerp = (isc_timermgr_t *)manager;
932 isc__timermgr_t *manager = (isc__timermgr_t *)manager0;
934 REQUIRE(VALID_MANAGER(manager));
936 SIGNAL(&manager->wakeup);
944 isc__timermgr_t *manager;
948 * Destroy a timer manager.
952 manager = (isc__timermgr_t *)*managerp;
953 REQUIRE(VALID_MANAGER(manager));
955 LOCK(&manager->lock);
958 manager->refs--;
959 if (manager->refs > 0) {
960 UNLOCK(&manager->lock);
968 isc__timermgr_dispatch((isc_timermgr_t *)manager);
971 REQUIRE(EMPTY(manager->timers));
972 manager->done = ISC_TRUE;
977 SIGNAL(&manager->wakeup);
980 UNLOCK(&manager->lock);
986 if (isc_thread_join(manager->thread, NULL) != ISC_R_SUCCESS)
997 (void)isc_condition_destroy(&manager->wakeup);
999 DESTROYLOCK(&manager->lock);
1000 isc_heap_destroy(&manager->heap);
1001 manager->common.impmagic = 0;
1002 manager->common.magic = 0;
1003 mctx = manager->mctx;
1004 isc_mem_put(mctx, manager, sizeof(*manager));
1017 isc__timermgr_t *manager = (isc__timermgr_t *)manager0;
1020 if (manager == NULL)
1021 manager = timermgr;
1023 if (manager == NULL || manager->nscheduled == 0)
1025 *when = manager->due;
1031 isc__timermgr_t *manager = (isc__timermgr_t *)manager0;
1035 if (manager == NULL)
1036 manager = timermgr;
1038 if (manager == NULL)
1041 dispatch(manager, &now);
1124 isc_timer_create(isc_timermgr_t *manager, isc_timertype_t type,
1129 REQUIRE(ISCAPI_TIMERMGR_VALID(manager));
1132 return (isc__timer_create(manager, type, expires, interval,
1135 return (manager->methods->timercreate(manager, type, expires,