Esempio n. 1
0
void rrdset_save_all(void) {
	info("Saving database...");

	RRDSET *st;
	RRDDIM *rd;

	pthread_rwlock_wrlock(&rrdset_root_rwlock);
	for(st = rrdset_root; st ; st = st->next) {
		pthread_rwlock_wrlock(&st->rwlock);

		if(st->mapped == RRD_MEMORY_MODE_SAVE) {
			debug(D_RRD_CALLS, "Saving stats '%s' to '%s'.", st->name, st->cache_filename);
			savememory(st->cache_filename, st, st->memsize);
		}

		for(rd = st->dimensions; rd ; rd = rd->next) {
			if(likely(rd->mapped == RRD_MEMORY_MODE_SAVE)) {
				debug(D_RRD_CALLS, "Saving dimension '%s' to '%s'.", rd->name, rd->cache_filename);
				savememory(rd->cache_filename, rd, rd->memsize);
			}
		}

		pthread_rwlock_unlock(&st->rwlock);
	}
	pthread_rwlock_unlock(&rrdset_root_rwlock);
}
Esempio n. 2
0
void rrdset_save_all(void)
{
	debug(D_RRD_CALLS, "rrdset_save_all()");

	// let it log a few error messages
	error_log_limit_reset();

	RRDSET *st;
	RRDDIM *rd;

	pthread_rwlock_wrlock(&rrdset_root_rwlock);
	for(st = rrdset_root; st ; st = st->next) {
		pthread_rwlock_wrlock(&st->rwlock);

		if(st->mapped == RRD_MEMORY_MODE_SAVE) {
			debug(D_RRD_CALLS, "Saving stats '%s' to '%s'.", st->name, st->cache_filename);
			savememory(st->cache_filename, st, st->memsize);
		}

		for(rd = st->dimensions; rd ; rd = rd->next) {
			if(likely(rd->mapped == RRD_MEMORY_MODE_SAVE)) {
				debug(D_RRD_CALLS, "Saving dimension '%s' to '%s'.", rd->name, rd->cache_filename);
				savememory(rd->cache_filename, rd, rd->memsize);
			}
		}

		pthread_rwlock_unlock(&st->rwlock);
	}
	pthread_rwlock_unlock(&rrdset_root_rwlock);
}
Esempio n. 3
0
void rrdset_free_all(void)
{
	info("Freeing all memory...");

	RRDSET *st;
	for(st = rrdset_root; st ;) {
		RRDSET *next = st->next;

		while(st->dimensions)
			rrddim_free(st, st->dimensions);

		rrdset_index_del(st);

		if(st->mapped == RRD_MEMORY_MODE_SAVE) {
			debug(D_RRD_CALLS, "Saving stats '%s' to '%s'.", st->name, st->cache_filename);
			savememory(st->cache_filename, st, st->memsize);

			debug(D_RRD_CALLS, "Unmapping stats '%s'.", st->name);
			munmap(st, st->memsize);
		}
		else if(st->mapped == RRD_MEMORY_MODE_MAP) {
			debug(D_RRD_CALLS, "Unmapping stats '%s'.", st->name);
			munmap(st, st->memsize);
		}
		else
			free(st);

		st = next;
	}
	rrdset_root = NULL;

	info("Memory cleanup completed...");
}
Esempio n. 4
0
void rrddim_free(RRDSET *st, RRDDIM *rd)
{
	debug(D_RRD_CALLS, "rrddim_free() %s.%s", st->name, rd->name);

	RRDDIM *i, *last = NULL;
	for(i = st->dimensions; i && i != rd ; i = i->next) last = i;

	if(!i) {
		error("Request to free dimension %s.%s but it is not linked.", st->id, rd->name);
		return;
	}

	if(last) last->next = rd->next;
	else st->dimensions = rd->next;
	rd->next = NULL;

	rrddim_index_del(st, rd);

	// free(rd->annotations);
	if(rd->mapped == RRD_MEMORY_MODE_SAVE) {
		debug(D_RRD_CALLS, "Saving dimension '%s' to '%s'.", rd->name, rd->cache_filename);
		savememory(rd->cache_filename, rd, rd->memsize);

		debug(D_RRD_CALLS, "Unmapping dimension '%s'.", rd->name);
		munmap(rd, rd->memsize);
	}
	else if(rd->mapped == RRD_MEMORY_MODE_MAP) {
		debug(D_RRD_CALLS, "Unmapping dimension '%s'.", rd->name);
		munmap(rd, rd->memsize);
	}
	else {
		debug(D_RRD_CALLS, "Removing dimension '%s'.", rd->name);
		free(rd);
	}
}
Esempio n. 5
0
int main (void) {
  intro ();
  loadmemory ();
  do playgame (); while (playagain ());
  if (memory[0] > 1) savememory ();
  printf ("\nPress ENTER to continue...");
  getchar ();
  return 0;
}