Lines Matching refs:stack
36 isc_astack_t *stack = isc_mem_get( in isc_astack_new() local
39 *stack = (isc_astack_t){ in isc_astack_new()
42 isc_mem_attach(mctx, &stack->mctx); in isc_astack_new()
43 memset(stack->nodes, 0, size * sizeof(uintptr_t)); in isc_astack_new()
44 isc_mutex_init(&stack->lock); in isc_astack_new()
45 return (stack); in isc_astack_new()
49 isc_astack_trypush(isc_astack_t *stack, void *obj) { in isc_astack_trypush() argument
50 if (!isc_mutex_trylock(&stack->lock)) { in isc_astack_trypush()
51 if (stack->pos >= stack->size) { in isc_astack_trypush()
52 UNLOCK(&stack->lock); in isc_astack_trypush()
55 stack->nodes[stack->pos++] = (uintptr_t)obj; in isc_astack_trypush()
56 UNLOCK(&stack->lock); in isc_astack_trypush()
64 isc_astack_pop(isc_astack_t *stack) { in isc_astack_pop() argument
65 LOCK(&stack->lock); in isc_astack_pop()
67 if (stack->pos == 0) { in isc_astack_pop()
70 rv = stack->nodes[--stack->pos]; in isc_astack_pop()
72 UNLOCK(&stack->lock); in isc_astack_pop()
77 isc_astack_destroy(isc_astack_t *stack) { in isc_astack_destroy() argument
78 LOCK(&stack->lock); in isc_astack_destroy()
79 REQUIRE(stack->pos == 0); in isc_astack_destroy()
80 UNLOCK(&stack->lock); in isc_astack_destroy()
82 isc_mutex_destroy(&stack->lock); in isc_astack_destroy()
84 isc_mem_putanddetach(&stack->mctx, stack, in isc_astack_destroy()
86 stack->size * sizeof(uintptr_t)); in isc_astack_destroy()