ble works again after sleep - but we are still leaking

This commit is contained in:
geeksville
2020-02-23 13:20:46 -08:00
parent 5f88174dbf
commit f9ce6a53e1
8 changed files with 61 additions and 2 deletions

View File

@@ -1,6 +1,8 @@
#include "SimpleAllocator.h"
#include "assert.h"
SimpleAllocator *activeAllocator;
SimpleAllocator::SimpleAllocator() { reset(); }
void *SimpleAllocator::alloc(size_t size)
@@ -8,6 +10,7 @@ void *SimpleAllocator::alloc(size_t size)
assert(nextFree + size <= sizeof(bytes));
void *res = &bytes[nextFree];
nextFree += size;
Serial.printf("Total simple allocs %u\n", nextFree);
return res;
}
@@ -18,3 +21,34 @@ void *operator new(size_t size, SimpleAllocator &p)
{
return p.alloc(size);
}
AllocatorScope::AllocatorScope(SimpleAllocator &a)
{
assert(!activeAllocator);
activeAllocator = &a;
}
AllocatorScope::~AllocatorScope()
{
assert(activeAllocator);
activeAllocator = NULL;
}
/// Global new/delete, uses a simple allocator if it is in scope
void *operator new(size_t sz) throw(std::bad_alloc)
{
void *mem = activeAllocator ? activeAllocator->alloc(sz) : malloc(sz);
if (mem)
return mem;
else
throw std::bad_alloc();
}
void operator delete(void *ptr) throw()
{
if (activeAllocator)
Serial.println("Warning: leaking an active allocator object"); // We don't properly handle this yet
else
free(ptr);
}