summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorqiuyiuestc <[email protected]>2010-11-24 01:27:45 +0000
committerqiuyiuestc <[email protected]>2010-11-24 01:27:45 +0000
commit56c6c301bcd923372797d6415ff38756705b92d0 (patch)
tree17d69772bc2f760233f0ee4b2ee690fbb4d2edaa /src
parentb5a2fde359360a9c86d3b165cb1f4bc85a7a306e (diff)
clean up code
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1106 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src')
-rw-r--r--src/module.c64
-rw-r--r--src/object.c4
2 files changed, 20 insertions, 48 deletions
diff --git a/src/module.c b/src/module.c
index bea13d0064..d1c535ad19 100644
--- a/src/module.c
+++ b/src/module.c
@@ -229,11 +229,6 @@ static void rt_module_init_object_container(struct rt_module* module)
rt_list_init(&(module->module_object[RT_Object_Class_Timer].object_list));
module->module_object[RT_Object_Class_Timer].object_size = sizeof(struct rt_timer);
module->module_object[RT_Object_Class_Timer].type = RT_Object_Class_Timer;
-
- /* init object container - module */
- rt_list_init(&(module->module_object[RT_Object_Class_Module].object_list));
- module->module_object[RT_Object_Class_Module].object_size = sizeof(struct rt_timer);
- module->module_object[RT_Object_Class_Module].type = RT_Object_Class_Module;
}
/**
@@ -388,11 +383,13 @@ rt_module_t rt_module_load(const rt_uint8_t* name, void* module_ptr)
if(elf_module->e_entry != 0)
{
/* init module page list */
- rt_list_init(&module->module_page);
-
+ rt_list_init(&module->page_list);
+
/* init module memory allocator */
- module->module_mem_list = RT_NULL;
- module->page_node_pool = RT_NULL;
+ module->mem_list = RT_NULL;
+
+ /* create mpool for page node */
+ module->mpool = rt_mp_create(name, 1024, sizeof(struct rt_module_page));
/* create module thread */
module->stack_size = 2048;
@@ -648,7 +645,7 @@ rt_err_t rt_module_unload(rt_module_t module)
}
/* free module pages */
- list = &module->module_page;
+ list = &module->page_list;
while(list->next != list)
{
struct rt_module_page* page;
@@ -659,18 +656,8 @@ rt_err_t rt_module_unload(rt_module_t module)
rt_list_remove(list->next);
}
- if(module->page_node_pool)
- {
- /* free page node mempool */
- if(((struct rt_mempool*)module->page_node_pool)->start_address != 0)
- rt_page_free(((struct rt_mempool*)module->page_node_pool)->start_address, 1);
-
- /* detach page node mempool */
- rt_mp_detach(module->page_node_pool);
-
- /* free page node mempool structure */
- rt_free(module->page_node_pool);
- }
+ /* delete mpool */
+ if(module->mpool) rt_mp_delete(module->mpool);
}
/* release module space memory */
@@ -730,33 +717,18 @@ static struct rt_mem_head *morepage(rt_size_t nu)
RT_ASSERT (nu != 0);
+ /* alloc pages from system heap */
npage = (nu * sizeof(struct rt_mem_head) + RT_MM_PAGE_SIZE - 1)/RT_MM_PAGE_SIZE;
cp = rt_page_alloc(npage);
if(cp == RT_NULL) return RT_NULL;
- if(!rt_current_module->page_node_pool)
- {
- rt_current_module->page_node_pool = rt_malloc(sizeof(struct rt_mempool));
- rt_memset(rt_current_module->page_node_pool, 0, sizeof(struct rt_mempool));
-
- /* allocate a page for page node */
- void *start = rt_page_alloc(1);
- rt_mp_init(
- (struct rt_mempool *)rt_current_module->page_node_pool,
- "pnp",
- start,
- RT_MM_PAGE_SIZE,
- sizeof(struct rt_module_page));
- }
-
- /* allocate page node from mempool */
- node = rt_mp_alloc((struct rt_mempool *)rt_current_module->page_node_pool, RT_WAITING_FOREVER);
+ /* allocate page list node from mpool */
+ node = rt_mp_alloc(rt_current_module->mpool, RT_WAITING_FOREVER);
node->ptr = cp;
node->npage = npage;
- /* insert page node to moudle's page list */
- if(rt_module_self() != RT_NULL)
- rt_list_insert_after (&rt_current_module->module_page, &node->list);
+ /* insert page list node to moudle's page list */
+ rt_list_insert_after (&rt_current_module->page_list, &node->list);
up = (struct rt_mem_head *) cp;
up->size = npage * RT_MM_PAGE_SIZE / sizeof(struct rt_mem_head);
@@ -779,7 +751,7 @@ void *rt_module_malloc(rt_size_t size)
RT_ASSERT(size != 0);
RT_ASSERT(nunits != 0);
- prev = (struct rt_mem_head **)&rt_current_module->module_mem_list;
+ prev = (struct rt_mem_head **)&rt_current_module->mem_list;
/* if alloc size is the multipal of 1K, TODO */
@@ -828,7 +800,7 @@ void rt_module_free(rt_module_t module, void *addr)
RT_ASSERT((((rt_uint32_t)addr) & (sizeof(struct rt_mem_head) -1)) == 0);
n = (struct rt_mem_head *)addr - 1;
- prev = (struct rt_mem_head **)&module->module_mem_list;
+ prev = (struct rt_mem_head **)&module->mem_list;
while ((b = *prev) != RT_NULL)
{
@@ -899,7 +871,7 @@ void *rt_module_realloc(void *ptr, rt_size_t size)
else
{
/* more space then required */
- prev = (struct rt_mem_head *)rt_current_module->module_mem_list;
+ prev = (struct rt_mem_head *)rt_current_module->mem_list;
for (p = prev->next; p != (b->size + b) && p != RT_NULL; prev = p, p = p->next) break;
/* available block after ap in freelist */
@@ -925,7 +897,7 @@ void *rt_module_realloc(void *ptr, rt_size_t size)
b->size = nunits;
prev->next = p;
}
- rt_current_module->module_mem_list = (void *)prev;
+ rt_current_module->mem_list = (void *)prev;
return (void *) (b + 1);
}
else /* allocate new memory and copy old data */
diff --git a/src/object.c b/src/object.c
index 34bae8b191..56703d655a 100644
--- a/src/object.c
+++ b/src/object.c
@@ -257,8 +257,8 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name)
struct rt_object_information* information;
#ifdef RT_USING_MODULE
- /* get module object information */
- information = (rt_module_self() != RT_NULL) ?
+ /* get module object information, module object should be managed by kernel object container */
+ information = (rt_module_self() != RT_NULL && (type != RT_Object_Class_Module)) ?
&rt_module_self()->module_object[type] : &rt_object_container[type];
#else
/* get object information */