Beispiel #1
0
int main()
{
	struct lf_lifo head;
	void *val1 = mmap_aligned(MAP_SIZE);
	void *val2 = mmap_aligned(MAP_SIZE);
	void *val3 = mmap_aligned(MAP_SIZE);
	lf_lifo_init(&head);

	fail_unless(lf_lifo_pop(&head) == NULL);
	fail_unless(lf_lifo_pop(lf_lifo_push(&head, val1)) == val1);
	fail_unless(lf_lifo_pop(lf_lifo_push(&head, val1)) == val1);
	lf_lifo_push(lf_lifo_push(lf_lifo_push(&head, val1), val2), val3);
	fail_unless(lf_lifo_pop(&head) == val3);
	fail_unless(lf_lifo_pop(&head) == val2);
	fail_unless(lf_lifo_pop(&head) == val1);
	fail_unless(lf_lifo_pop(&head) == NULL);

	lf_lifo_init(&head);

	/* Test overflow of ABA counter. */

	int i = 0;
	do {
		lf_lifo_push(&head, val1);
		fail_unless(lf_lifo_pop(&head) == val1);
		fail_unless(lf_lifo_pop(&head) == NULL);
		i++;
	} while (head.next != 0);

	munmap(val1, MAP_SIZE);
	munmap(val2, MAP_SIZE);
	munmap(val3, MAP_SIZE);

	printf("success\n");

	return 0;
}
Beispiel #2
0
void
slab_unmap(struct slab_arena *arena, void *ptr)
{
	if (ptr)
		lf_lifo_push(&arena->cache, ptr);
}