示例#1
0
文件: dbmem.c 项目: cfrantz/pongo
void *dbfile_more_mem(mmfile_t *mm, uint32_t *size)
{
	uint64_t chunksize;
	dbroot_t *root;
	int n, rc;
	void *ret = NULL;

	root = (dbroot_t*)mm->map[0].ptr;
	chunksize = root->meta.chunksize;
	mm_lock(mm, MLCK_WR, __offset(mm, &root->resize), sizeof(root->resize));
	if (mm->size == mm_size(mm)) {
		log_debug("Resizing mmfile +%d bytes", chunksize);
		rc = mm_resize(mm, mm->size + chunksize);
		if (rc != 0) {
			log_error("Resize failed"); abort();
		}
		n = mm->nmap-1;
		*size = mm->map_offset[n].size;
		ret = mm->map_offset[n].ptr;
	} else {
		chunksize = mm_size(mm);
		log_debug("Expanding mapping to 0x%x bytes", chunksize);
		mm_resize(mm, chunksize);
	}
	mm_lock(mm, MLCK_UN, __offset(mm, &root->resize), sizeof(root->resize));
	return ret;
}
示例#2
0
/***********************************************************************
 * Resize an array.  Allocates the array if it is null.
 ***********************************************************************/
ARRAY_T* resize_array
  (ARRAY_T* array,
   const int num_items)
{
  ARRAY_T* new_array;

  if (array == NULL) {
    new_array = allocate_array(num_items);
  } else {
    new_array = array;
    mm_resize(new_array->items, num_items, ATYPE);
    new_array->num_items = num_items;
  }
  return(new_array);
}
示例#3
0
文件: centrimo.c 项目: CPFL/gmeme
/*************************************************************************
 * Keep track of any sites which have the best score seen
 *************************************************************************/
static void track_site(SEQ_SITES_T* seq_sites, double score, 
    int start, char strand) {
  SEQ_SITE_T *site;
  // don't bother recording worse scores
  if (score < seq_sites->best) return;
  // better scores clear the list
  if (score > seq_sites->best) {
    seq_sites->used = 0;
    seq_sites->best = score;
  }
  // allocate memory on demand
  if (seq_sites->allocated <= seq_sites->used) {
    seq_sites->allocated += SCORE_BLOCK;
    mm_resize(seq_sites->sites, seq_sites->allocated, SEQ_SITE_T);
  }
  // store the site
  site = seq_sites->sites+(seq_sites->used++);
  site->start = start;
  site->strand = strand;
}