diff options
| author | bernard.xiong <[email protected]> | 2009-11-29 13:55:59 +0000 |
|---|---|---|
| committer | bernard.xiong <[email protected]> | 2009-11-29 13:55:59 +0000 |
| commit | c096268a881450bd3e49cdf81730e0730e74b901 (patch) | |
| tree | db75c98d42a03fe71ccf287a0c9b96b5de99395d /src/mempool.c | |
| parent | 885045ef426614e669cbed538fbf135d974c1a36 (diff) | |
fix mempool init bug.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@178 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src/mempool.c')
| -rw-r--r-- | src/mempool.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/mempool.c b/src/mempool.c index 3c5637d20e..ab90fdc465 100644 --- a/src/mempool.c +++ b/src/mempool.c @@ -108,7 +108,7 @@ rt_err_t rt_mp_init(struct rt_mempool* mp, const char* name, void *start, rt_siz = (rt_uint8_t*)(block_ptr + (offset + 1) * (block_size + sizeof(rt_uint8_t*))); } - *(rt_uint8_t**)(block_ptr + offset * (block_size + sizeof(rt_uint8_t*))) = RT_NULL; + *(rt_uint8_t**)(block_ptr + (offset - 1) * (block_size + sizeof(rt_uint8_t*))) = RT_NULL; mp->block_list = block_ptr; @@ -203,7 +203,7 @@ rt_mp_t rt_mp_create(const char* name, rt_size_t block_count, rt_size_t block_si = block_ptr + (offset + 1) * (block_size + sizeof(rt_uint8_t*)); } - *(rt_uint8_t**)(block_ptr + offset * (block_size + sizeof(rt_uint8_t*))) = RT_NULL; + *(rt_uint8_t**)(block_ptr + (offset - 1) * (block_size + sizeof(rt_uint8_t*))) = RT_NULL; mp->block_list = block_ptr; @@ -294,7 +294,12 @@ void *rt_mp_alloc (rt_mp_t mp, rt_int32_t time) else { /* memory block is unavailable. */ - if (time == 0) return RT_NULL; + if (time == 0)
+ {
+ /* enable interrupt */ + rt_hw_interrupt_enable(level); + return RT_NULL;
+ } else { /* get current thread */ @@ -335,7 +340,6 @@ void *rt_mp_alloc (rt_mp_t mp, rt_int32_t time) } } - /* enable interrupt */ rt_hw_interrupt_enable(level); |
