コード例 #1
0
static void
mm_lock_print_stat(const struct mm_thread *thread,
		   const struct mm_lock_stat_set *stat_set,
		   const struct mm_lock_stat *stat)
{
	const char *name = mm_thread_getname(thread);
	if (stat_set->moreinfo != NULL)
		mm_verbose("lock %s (%s), %s, locked %llu, failed %llu",
			stat_set->location, stat_set->moreinfo, name,
			stat->lock_count, stat->fail_count);
	else
		mm_verbose("lock %s, %s, locked %llu, failed %llu",
			stat_set->location, name,
			stat->lock_count, stat->fail_count);
}
コード例 #2
0
ファイル: pool.c プロジェクト: ademakov/MainMemory
static void
mm_pool_prepare_low(struct mm_pool *pool,
		    const char *pool_name,
		    const struct mm_arena *arena,
		    uint32_t item_size)
{
	ASSERT(item_size < 0x200);

	if (item_size < sizeof(struct mm_slink))
		item_size = sizeof(struct mm_slink);

	mm_verbose("make the '%s' memory pool with element size %u",
		   pool_name, item_size);

	pool->item_last = 0;
	pool->item_size = item_size;

	pool->block_capacity = MM_POOL_BLOCK_SIZE / item_size;
	pool->block_array_used = 0;
	pool->block_array_size = 0;

	pool->arena = arena;
	pool->block_array = NULL;
	pool->block_cur_ptr = NULL;
	pool->block_end_ptr = NULL;

	mm_stack_prepare(&pool->free_list);

	pool->pool_name = mm_global_strdup(pool_name);
}
コード例 #3
0
ファイル: pool.c プロジェクト: ademakov/MainMemory
static void
mm_pool_grow(struct mm_pool *pool)
{
	ENTER();

	// Check for 32-bit integer overflow.
	uint32_t total_capacity = pool->block_capacity * pool->block_array_used;
	if (unlikely(total_capacity > (total_capacity + pool->block_capacity)))
		mm_fatal(0, "the '%s' memory pool overflow", pool->pool_name);

	// If needed grow the block container array.
	if (pool->block_array_used == pool->block_array_size) {
		if (pool->block_array_size)
			pool->block_array_size *= 2;
		else
			pool->block_array_size = 4;

		pool->block_array = mm_arena_realloc(
			pool->arena,
			pool->block_array,
			pool->block_array_size * sizeof(char *));
	}

	// Allocate a new memory block.
	char *block = mm_arena_alloc(pool->arena, MM_POOL_BLOCK_SIZE);
	pool->block_array[pool->block_array_used] = block;
	pool->block_array_used++;

	pool->block_cur_ptr = block;
	pool->block_end_ptr = block + pool->block_capacity * pool->item_size;

	mm_verbose("grow the '%s' memory pool to %u elements, occupy %lu bytes",
		   pool->pool_name,
		   pool->block_capacity * pool->block_array_used,
		   (unsigned long) MM_POOL_BLOCK_SIZE * pool->block_array_used);

	LEAVE();
}