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
|
// Clean up by decrementing counter
|
||||||
decrement_counter();
|
decrement_counter();
|
||||||
|
|
||||||
|
_ptr = ptr;
|
||||||
if (ptr != NULL) {
|
if (ptr != NULL) {
|
||||||
// Allocate counter on the heap, so it can be shared
|
// Allocate counter on the heap, so it can be shared
|
||||||
_counter = new uint32_t;
|
_counter = new uint32_t;
|
||||||
*_counter = 1;
|
*_counter = 1;
|
||||||
|
} else {
|
||||||
|
_counter = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,6 +229,8 @@ private:
|
||||||
/**
|
/**
|
||||||
* @brief Decrement reference counter.
|
* @brief Decrement reference counter.
|
||||||
* @details If count reaches zero, free counter and delete object pointed to.
|
* @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()
|
void decrement_counter()
|
||||||
{
|
{
|
||||||
|
@ -233,9 +238,7 @@ private:
|
||||||
uint32_t new_value = core_util_atomic_decr_u32(_counter, 1);
|
uint32_t new_value = core_util_atomic_decr_u32(_counter, 1);
|
||||||
if (new_value == 0) {
|
if (new_value == 0) {
|
||||||
delete _counter;
|
delete _counter;
|
||||||
_counter = NULL;
|
|
||||||
delete _ptr;
|
delete _ptr;
|
||||||
_ptr = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue