Пример #1
0
static void *gc_thread(void *arg)
{
	struct PupHeap *heap = (struct PupHeap *)arg;
	struct timespec req = {
		.tv_sec = 0,
		.tv_nsec = 500000000
	};
	ANNOTATE_THREAD_NAME("garbage-collector");
	while (1) {
		int res = nanosleep(&req, NULL);
		ABORTF_ON(res==EINVAL, "nanosleep() reports invalid timespec");
		ABORTF_ON(res==EFAULT, "nanosleep() reports EFAULT");
		perform_gc(heap);
	}
	return NULL;
}

static int heap_thread_stop(struct PupHeap *heap)
{
	int res = pthread_cancel(heap->gc_thread);
	if (res) {
		return res;
	}
	
	res = pthread_join(heap->gc_thread, NULL);
	return res;
}
Пример #2
0
Файл: a2c.c Проект: sacado/arc2c
obj gc_malloc (size_t size){
  int i = 0;
  obj res;

  if (freel.nbfree == 0)
    perform_gc();

  i = freel.free[--freel.nbfree];

  if (freel.mark[i] != FREE)
    printf ("%d\n", freel.mark[i]);

  res = (obj) malloc(size);
  freel.heap[i] = res;
  freel.mark[i] = UNMARKED;

  return res;
}