Пример #1
0
int main(int argc, char *argv[])
{
	int *h_mem = NULL;
	int cnt = 0;
	struct mp_mem_head_t *p_mem_head = NULL;
	struct mp_node_t *pp_node_array[NEW_NODE_NUM];
	struct mp_node_t *p_node = NULL;

	p_mem_head = mp_alloc(&h_mem, ALLOC_NODE_NUM);
	for (cnt = 0; cnt < NEW_NODE_NUM; cnt++) {
		pp_node_array[cnt] = mp_new_node(h_mem);
		if (pp_node_array[cnt] == NULL) {
			mp_clean(h_mem);
			return -1;
		}
	}
	for (cnt = 0; cnt < NEW_NODE_NUM; cnt += 3) {
		mp_del_node(h_mem, pp_node_array[cnt]);
	}
	mp_del_node(h_mem, pp_node_array[NEW_NODE_NUM - 1]);
	for (cnt = 0; cnt < NEW_NODE_NUM; cnt++) {
		pp_node_array[cnt] = mp_new_node(h_mem);
	}
//	pp_node_array[3] = mp_new_node(h_mem);
//	pp_node_array[6] = mp_new_node(h_mem);
//	pp_node_array[9] = mp_new_node(h_mem);
//	pp_node_array[12] = mp_new_node(h_mem);
//	pp_node_array[15] = mp_new_node(h_mem);
	p_node = (struct mp_node_t *)(p_mem_head + 1);
	for (cnt = 0; cnt < ALLOC_NODE_NUM; cnt++, p_node++) {
		printf("node: %p\tprev: %p\tnext: %p\tused: %d\n",
				p_node, p_node->p_prev, p_node->p_next, p_node->used);
	}
#if 0
	for (cnt = 0; cnt < NEW_NODE_NUM; cnt++) {
		if (pp_node_array[cnt] != NULL) {
			printf("p_node: %p, p_node prev: %p, p_node next: %p\n",
					pp_node_array[cnt],
					pp_node_array[cnt]->p_prev,
					pp_node_array[cnt]->p_next);
		}
	}
#endif
	printf("------------- memory pool info ------------\n");
	printf("first %p, tail %p, used: %d\n",
			p_mem_head->p_node_first,
			p_mem_head->p_node_tail,
			p_mem_head->used_node_num);
	mp_clean(h_mem);
	return 0;
}
Пример #2
0
/*
 * @brief    exit system monitor
 * @param    none
 * @return   status
 * @note     this function can be external, but intentionally set to be private
 *           only for monitor daemon to call this function
 */
HRESULT monitor_exit(VOID)
{
	M_CC_MSG_t msg = {0, 0, 0};
	HRESULT ret = E_FAIL;
	struct mp_mem_head_t *p_mem_head = NULL;

	M_DAEMON_PRINT(LOG_DEBUG, "enter\n");
	p_mem_head = (struct mp_mem_head_t *)h_mem;

	if (cnt_init == 0) {
		M_DAEMON_PRINT(LOG_WARN, "warning: daemon is not running\n");
		return S_OK;
	} else
		cnt_init = 0;

	M_DAEMON_ASSERT(h_mem != NULL);
	msg.m_MsgID = (UINT32)MSG_CMD_EXIT;
	msg.m_Param1 = 0;
	msg.m_Param2 = 0;
	ret = M_OSAL_Task_MsgQ_Post(&h_daemon, &msg);
	M_DAEMON_ASSERT(ret == S_OK);

	ret = M_OSAL_Task_Join(&h_daemon);
	M_DAEMON_ASSERT(ret == S_OK);

#if 0
	/* do not need to exit OSAL */
	ret = M_OSAL_Exit();
	M_DAEMON_ASSERT(ret == S_OK);
#endif
#ifndef __BIONIC__
	ret = mp_sem_delete(semid);
	M_DAEMON_ASSERT(ret == 0)
#endif
#ifndef __BIONIC__
	mp_shm_clean(shmid, &h_mem);
#else
        mp_clean(&h_mem);
#endif
	M_DAEMON_PRINT(LOG_DEBUG, "leave\n");
	return S_OK;
}