mirror of https://github.com/ARMmbed/mbed-os.git
Fix SharedPtr::reset
SharedPtr::reset did not actually set the stored pointer value. Correct this, with other minor tidies: * Ensure counter is set to NULL if pointer is reset to NULL * Be consistent about not clearing pointers in decrement_counter().pull/9580/head
parent
a4ed473afc
commit
0b27c9149e
|
@ -145,10 +145,13 @@ public:
|
|||
// Clean up by decrementing counter
|
||||
decrement_counter();
|
||||
|
||||
_ptr = ptr;
|
||||
if (ptr != NULL) {
|
||||
// Allocate counter on the heap, so it can be shared
|
||||
_counter = new uint32_t;
|
||||
*_counter = 1;
|
||||
} else {
|
||||
_counter = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -226,6 +229,8 @@ private:
|
|||
/**
|
||||
* @brief Decrement reference counter.
|
||||
* @details If count reaches zero, free counter and delete object pointed to.
|
||||
* Does not modify our own pointers - assumption is they will be overwritten
|
||||
* or destroyed immediately afterwards.
|
||||
*/
|
||||
void decrement_counter()
|
||||
{
|
||||
|
@ -233,9 +238,7 @@ private:
|
|||
uint32_t new_value = core_util_atomic_decr_u32(_counter, 1);
|
||||
if (new_value == 0) {
|
||||
delete _counter;
|
||||
_counter = NULL;
|
||||
delete _ptr;
|
||||
_ptr = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue