82 struct memp_malloc_helper *element;
86 for (poolnr = MEMP_POOL_FIRST; poolnr <= MEMP_POOL_LAST; poolnr = (
memp_t)(poolnr + 1)) {
87#if MEM_USE_POOLS_TRY_BIGGER_POOL
92 if (required_size <= memp_sizes[poolnr]) {
96 if (poolnr > MEMP_POOL_LAST) {
97 LWIP_ASSERT(
"mem_malloc(): no pool is that big!", 0);
100 element = (
struct memp_malloc_helper*)
memp_malloc(poolnr);
101 if (element ==
NULL) {
104#if MEM_USE_POOLS_TRY_BIGGER_POOL
106 if (poolnr < MEMP_POOL_LAST) {
115 element->poolnr = poolnr;
132 struct memp_malloc_helper *hmem;
138 hmem = (
struct memp_malloc_helper*)(
void*)((
u8_t*)rmem -
LWIP_MEM_ALIGN_SIZE(
sizeof(
struct memp_malloc_helper)));
172#define MIN_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MIN_SIZE)
173#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))
174#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE)
180#ifndef LWIP_RAM_HEAP_POINTER
183#define LWIP_RAM_HEAP_POINTER ram_heap
189static struct mem *ram_end;
191static struct mem *lfree;
195static sys_mutex_t mem_mutex;
198#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
200static volatile u8_t mem_free_count;
203#define LWIP_MEM_FREE_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_free)
204#define LWIP_MEM_FREE_PROTECT() SYS_ARCH_PROTECT(lev_free)
205#define LWIP_MEM_FREE_UNPROTECT() SYS_ARCH_UNPROTECT(lev_free)
206#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc)
207#define LWIP_MEM_ALLOC_PROTECT() SYS_ARCH_PROTECT(lev_alloc)
208#define LWIP_MEM_ALLOC_UNPROTECT() SYS_ARCH_UNPROTECT(lev_alloc)
213#define LWIP_MEM_FREE_DECL_PROTECT()
214#define LWIP_MEM_FREE_PROTECT() sys_mutex_lock(&mem_mutex)
215#define LWIP_MEM_FREE_UNPROTECT() sys_mutex_unlock(&mem_mutex)
217#define LWIP_MEM_ALLOC_DECL_PROTECT()
218#define LWIP_MEM_ALLOC_PROTECT()
219#define LWIP_MEM_ALLOC_UNPROTECT()
236plug_holes(
struct mem *
mem)
249 if (
mem != nmem && nmem->
used == 0 && (
u8_t *)nmem != (
u8_t *)ram_end) {
260 if (pmem !=
mem && pmem->
used == 0) {
284 mem = (
struct mem *)(
void *)ram;
295 lfree = (
struct mem *)(
void *)ram;
352#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
409 if (newsize >
size) {
413 if (newsize ==
size) {
422 if(mem2->
used == 0) {
430 lfree = (
struct mem *)(
void *)&ram[ptr2];
432 mem2 = (
struct mem *)(
void *)&ram[ptr2];
444 ((
struct mem *)(
void *)&ram[mem2->
next])->
prev = ptr2;
457 mem2 = (
struct mem *)(
void *)&ram[ptr2];
466 ((
struct mem *)(
void *)&ram[mem2->
next])->
prev = ptr2;
477#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
498#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
499 u8_t local_mem_free_count = 0;
523#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
526 local_mem_free_count = 0;
535#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
540 if (mem_free_count != 0) {
543 local_mem_free_count = 1;
566 mem2 = (
struct mem *)(
void *)&ram[ptr2];
575 ((
struct mem *)(
void *)&ram[mem2->
next])->
prev = ptr2;
589#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
590mem_malloc_adjust_lfree:
593 struct mem *cur = lfree;
595 while (cur->
used && cur != ram_end) {
596#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
601 if (mem_free_count != 0) {
604 goto mem_malloc_adjust_lfree;
607 cur = (
struct mem *)(
void *)&ram[cur->
next];
610 LWIP_ASSERT(
"mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->
used)));
614 LWIP_ASSERT(
"mem_malloc: allocated memory not above ram_end.",
616 LWIP_ASSERT(
"mem_malloc: allocated memory properly aligned.",
624#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT
626 }
while(local_mem_free_count != 0);
654 memset(p, 0, count *
size);
#define LWIP_DBG_LEVEL_SERIOUS
#define LWIP_DEBUGF(debug, message)
#define LWIP_ASSERT(message, assertion)
#define LWIP_DBG_LEVEL_SEVERE
#define LWIP_MEM_ALLOC_DECL_PROTECT()
void * mem_calloc(mem_size_t count, mem_size_t size)
#define LWIP_MEM_ALLOC_PROTECT()
#define LWIP_RAM_HEAP_POINTER
void * mem_malloc(mem_size_t size)
#define LWIP_MEM_FREE_DECL_PROTECT()
void mem_free(void *rmem)
#define LWIP_MEM_FREE_UNPROTECT()
u8_t ram_heap[MEM_SIZE_ALIGNED+(2 *SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT]
#define SIZEOF_STRUCT_MEM
void * mem_trim(void *rmem, mem_size_t newsize)
#define LWIP_MEM_FREE_PROTECT()
#define LWIP_MEM_ALLOC_UNPROTECT()
#define LWIP_MEM_ALIGN(addr)
#define LWIP_MEM_ALIGN_SIZE(size)
void * memp_malloc(memp_t type)
void memp_free(memp_t type, void *mem)
#define MEM_STATS_AVAIL(x, y)
#define MEM_STATS_DEC_USED(x, y)
#define MEM_STATS_INC_USED(x, y)
#define SYS_ARCH_UNPROTECT(lev)
err_t sys_mutex_new(sys_mutex_t *mutex)
#define SYS_ARCH_PROTECT(lev)
void sys_mutex_lock(sys_mutex_t *mutex)
void sys_mutex_unlock(sys_mutex_t *mutex)
#define SYS_ARCH_DECL_PROTECT(lev)