sforkowany z mirror/meshtastic-firmware
ble works again after sleep - but we are still leaking
rodzic
5f88174dbf
commit
f9ce6a53e1
|
@ -135,3 +135,7 @@ BLEService *createUpdateService(BLEServer *server)
|
|||
|
||||
return service;
|
||||
}
|
||||
|
||||
void destroyUpdateService() {
|
||||
resultC = NULL;
|
||||
}
|
|
@ -4,4 +4,5 @@
|
|||
|
||||
BLEService *createUpdateService(BLEServer* server);
|
||||
|
||||
void destroyUpdateService();
|
||||
void bluetoothRebootCheck();
|
|
@ -192,7 +192,8 @@ class MySecurity : public BLESecurityCallbacks
|
|||
void deinitBLE()
|
||||
{
|
||||
batteryLevelC = NULL; // Don't let anyone generate bogus notifies
|
||||
|
||||
destroyUpdateService();
|
||||
|
||||
BLEDevice::deinit(false);
|
||||
btPool.reset();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -31,3 +31,12 @@ public:
|
|||
|
||||
void *operator new(size_t size, SimpleAllocator &p);
|
||||
|
||||
/**
|
||||
* Temporarily makes the specified Allocator be used for _all_ allocations. Useful when calling library routines
|
||||
* that don't know about pools
|
||||
*/
|
||||
class AllocatorScope {
|
||||
public:
|
||||
AllocatorScope(SimpleAllocator &a);
|
||||
~AllocatorScope();
|
||||
};
|
||||
|
|
|
@ -319,3 +319,7 @@ BLEService *createMeshBluetoothService(BLEServer *server)
|
|||
|
||||
return service;
|
||||
}
|
||||
|
||||
void destroyMeshBluetoothService() {
|
||||
meshFromNumCharacteristic = NULL;
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
#include <Arduino.h>
|
||||
|
||||
BLEService *createMeshBluetoothService(BLEServer* server);
|
||||
void destroyMeshBluetoothService();
|
||||
|
||||
/**
|
||||
* Tell any bluetooth clients that the number of rx packets has changed
|
||||
|
|
|
@ -264,6 +264,10 @@ void setup()
|
|||
void initBluetooth()
|
||||
{
|
||||
DEBUG_MSG("Starting bluetooth\n");
|
||||
|
||||
// FIXME - we are leaking like crazy
|
||||
// AllocatorScope scope(btPool);
|
||||
|
||||
BLEServer *serve = initBLE(getDeviceName(), HW_VENDOR, str(APP_VERSION)); // FIXME, use a real name based on the macaddr
|
||||
createMeshBluetoothService(serve);
|
||||
|
||||
|
@ -284,7 +288,8 @@ void setBluetoothEnable(bool on)
|
|||
}
|
||||
else
|
||||
{
|
||||
// FIXME - we are leaking like crazy
|
||||
// We have to totally teardown our bluetooth objects to prevent leaks
|
||||
destroyMeshBluetoothService();
|
||||
deinitBLE();
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue