Virtual call screwup fix

This commit is contained in:
Pavel Kirienko
2014-04-18 18:57:54 +04:00
parent bfe1447426
commit febc3ed870
2 changed files with 10 additions and 2 deletions
@@ -121,6 +121,9 @@ class UAVCAN_EXPORT DynamicTransferBufferManagerEntry
uint16_t max_write_pos_; uint16_t max_write_pos_;
const uint16_t max_size_; 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(); void resetImpl();
public: public:
@@ -136,7 +139,7 @@ public:
~DynamicTransferBufferManagerEntry() ~DynamicTransferBufferManagerEntry()
{ {
DynamicTransferBufferManagerEntry::resetImpl(); doReset();
} }
static DynamicTransferBufferManagerEntry* instantiate(IPoolAllocator& allocator, uint16_t max_size); static DynamicTransferBufferManagerEntry* instantiate(IPoolAllocator& allocator, uint16_t max_size);
@@ -96,7 +96,7 @@ void DynamicTransferBufferManagerEntry::destroy(DynamicTransferBufferManagerEntr
} }
} }
void DynamicTransferBufferManagerEntry::resetImpl() void DynamicTransferBufferManagerEntry::doReset()
{ {
max_write_pos_ = 0; max_write_pos_ = 0;
Block* p = blocks_.get(); 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 int DynamicTransferBufferManagerEntry::read(unsigned offset, uint8_t* data, unsigned len) const
{ {
if (!data) if (!data)