mirror of https://github.com/ARMmbed/mbed-os.git
commit
6684570dea
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -223,15 +226,15 @@ 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()
|
||||
{
|
||||
if (_ptr != NULL) {
|
||||
if (core_util_atomic_decr_u32(_counter, 1) == 0) {
|
||||
delete _counter;
|
||||
_counter = NULL;
|
||||
delete _ptr;
|
||||
_ptr = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue