void MemoryPool::freeBlock(memhandle handle) { memblock *b = &blocks[POOLSTART]; do { memhandle next = b->nextblock; if (next == handle) { memblock *f = &blocks[next]; #ifdef MEMBLOCK_FREE MEMBLOCK_FREE(f->begin,f->size); #endif b->nextblock = f->nextblock; f->size = 0; f->nextblock = NOBLOCK; return; } if (next == NOBLOCK) return; b = &blocks[next]; } while (true); }
void MemoryPool::freeBlock(memhandle handle) { #if ACTLOGLEVEL>=LOG_DEBUG_V3 LogObject.uart_send_strln(F("MemoryPool::freeBlock(memhandle handle) DEBUG_V3:Function started")); #endif if (handle == NOBLOCK) { #if ACTLOGLEVEL>=LOG_WARNING LogObject.uart_send_strln(F("MemoryPool::freeBlock(memhandle handle) WARNING: Don't free NOBLOCK handle")); #endif return; } memblock *b = &blocks[POOLSTART]; do { memhandle next = b->nextblock; if (next == handle) { memblock *f = &blocks[next]; #ifdef MEMBLOCK_FREE MEMBLOCK_FREE(f->begin,f->size); #endif b->nextblock = f->nextblock; f->size = 0; f->nextblock = NOBLOCK; return; } if (next == NOBLOCK) return; b = &blocks[next]; #if defined(ESP8266) // yield(); #endif } while (true); }