78 #define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_DECLARE(name,num,size,desc)
82 #define LWIP_MEMPOOL(name,num,size,desc) &memp_ ## name,
86 #ifdef LWIP_HOOK_FILENAME
87 #include LWIP_HOOK_FILENAME
90 #if MEMP_MEM_MALLOC && MEMP_OVERFLOW_CHECK >= 2
91 #undef MEMP_OVERFLOW_CHECK
93 #define MEMP_OVERFLOW_CHECK 1
96 #if MEMP_SANITY_CHECK && !MEMP_MEM_MALLOC
101 memp_sanity(
const struct memp_desc *desc)
119 #if MEMP_OVERFLOW_CHECK
128 memp_overflow_check_element_overflow(
struct memp *p,
const struct memp_desc *desc)
130 #if MEMP_SANITY_REGION_AFTER_ALIGNED > 0
134 for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) {
136 char errstr[128] =
"detected memp overflow in pool ";
137 strcat(errstr, desc->desc);
155 memp_overflow_check_element_underflow(
struct memp *p,
const struct memp_desc *desc)
157 #if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0
160 m = (
u8_t*)p +
MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;
161 for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) {
163 char errstr[128] =
"detected memp underflow in pool ";
164 strcat(errstr, desc->desc);
178 memp_overflow_init_element(
struct memp *p,
const struct memp_desc *desc)
180 #if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 || MEMP_SANITY_REGION_AFTER_ALIGNED > 0
182 #if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0
183 m = (
u8_t*)p +
MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;
184 memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED);
186 #if MEMP_SANITY_REGION_AFTER_ALIGNED > 0
188 memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED);
196 #if MEMP_OVERFLOW_CHECK >= 2
203 memp_overflow_check_all(
void)
213 memp_overflow_check_element_overflow(p,
memp_pools[i]);
214 memp_overflow_check_element_underflow(p,
memp_pools[i]);
241 for (i = 0; i < desc->
num; ++i) {
244 #if MEMP_OVERFLOW_CHECK
245 memp_overflow_init_element(
memp, desc);
250 + MEMP_SANITY_REGION_AFTER_ALIGNED
255 desc->stats->avail = desc->
num;
259 #if MEMP_STATS && (defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY)
260 desc->stats->name = desc->desc;
279 #if LWIP_STATS && MEMP_STATS
284 #if MEMP_OVERFLOW_CHECK >= 2
286 memp_overflow_check_all();
291 #if !MEMP_OVERFLOW_CHECK
292 do_memp_malloc_pool(
const struct memp_desc *desc)
294 do_memp_malloc_pool_fn(
const struct memp_desc *desc,
const char*
file,
const int line)
311 #if MEMP_OVERFLOW_CHECK == 1
312 memp_overflow_check_element_overflow(
memp, desc);
313 memp_overflow_check_element_underflow(
memp, desc);
317 #if MEMP_OVERFLOW_CHECK
321 #if MEMP_OVERFLOW_CHECK
325 memp_overflow_init_element(
memp, desc);
332 if (desc->stats->used > desc->stats->max) {
333 desc->stats->max = desc->stats->used;
358 #if !MEMP_OVERFLOW_CHECK
361 memp_malloc_pool_fn(
const struct memp_desc *desc,
const char*
file,
const int line)
369 #if !MEMP_OVERFLOW_CHECK
370 return do_memp_malloc_pool(desc);
372 return do_memp_malloc_pool_fn(desc,
file, line);
384 #if !MEMP_OVERFLOW_CHECK
387 memp_malloc_fn(
memp_t type,
const char*
file,
const int line)
393 #if MEMP_OVERFLOW_CHECK >= 2
394 memp_overflow_check_all();
397 #if !MEMP_OVERFLOW_CHECK
407 do_memp_free_pool(
const struct memp_desc* desc,
void *
mem)
420 #if MEMP_OVERFLOW_CHECK == 1
421 memp_overflow_check_element_overflow(
memp, desc);
422 memp_overflow_check_element_underflow(
memp, desc);
437 #if MEMP_SANITY_CHECK
459 do_memp_free_pool(desc,
mem);
471 #ifdef LWIP_HOOK_MEMP_AVAILABLE
472 struct memp *old_first;
481 #if MEMP_OVERFLOW_CHECK >= 2
482 memp_overflow_check_all();
485 #ifdef LWIP_HOOK_MEMP_AVAILABLE
491 #ifdef LWIP_HOOK_MEMP_AVAILABLE
492 if (old_first ==
NULL) {
493 LWIP_HOOK_MEMP_AVAILABLE(type);