Virtual call screwup fix

This commit is contained in:
Pavel Kirienko 2014-04-18 18:54:40 +04:00
parent bfe1447426
commit febc3ed870
2 changed files with 10 additions and 2 deletions

View File

@ -121,6 +121,9 @@ class UAVCAN_EXPORT DynamicTransferBufferManagerEntry
uint16_t max_write_pos_;
const uint16_t max_size_;
/// Reset functionality must be implemented in a non-virtual method to call it safely from the destructor.
void doReset();
void resetImpl();
public:
@ -136,7 +139,7 @@ public:
~DynamicTransferBufferManagerEntry()
{
DynamicTransferBufferManagerEntry::resetImpl();
doReset();
}
static DynamicTransferBufferManagerEntry* instantiate(IPoolAllocator& allocator, uint16_t max_size);

View File

@ -96,7 +96,7 @@ void DynamicTransferBufferManagerEntry::destroy(DynamicTransferBufferManagerEntr
}
}
void DynamicTransferBufferManagerEntry::resetImpl()
void DynamicTransferBufferManagerEntry::doReset()
{
max_write_pos_ = 0;
Block* p = blocks_.get();
@ -109,6 +109,11 @@ void DynamicTransferBufferManagerEntry::resetImpl()
}
}
void DynamicTransferBufferManagerEntry::resetImpl()
{
doReset();
}
int DynamicTransferBufferManagerEntry::read(unsigned offset, uint8_t* data, unsigned len) const
{
if (!data)