[libvirt] [PATCH 2/6] storage: Add storagePoolSetInactive

Cole Robinson crobinso at redhat.com
Fri Jun 24 13:36:01 UTC 2016


On 06/24/2016 09:26 AM, Ján Tomko wrote:
> On Wed, Jun 22, 2016 at 08:12:12PM -0400, Cole Robinson wrote:
>> This function handles newDef assignment and transient pool removal
>> when an object is set inactive. The return value notifies callers
>> if the pool was removed, so they know not to try to access the
>> pool object anymore.
>>
>> Some users don't gain anything from it at this point, but future
>> patches will improve that.
>> ---
>> src/storage/storage_driver.c | 54 +++++++++++++++++++++++++++++++-------------
>> 1 file changed, 38 insertions(+), 16 deletions(-)
>>
>> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
>> index 3bdc13f..c7ffea8 100644
>> --- a/src/storage/storage_driver.c
>> +++ b/src/storage/storage_driver.c
>> @@ -76,6 +76,32 @@ static void storageDriverUnlock(void)
>>     virMutexUnlock(&driver->lock);
>> }
>>
>> +/*
>> + * storagePoolSetInactive:
>> + * Helper for setting a pool object as 'inactive'. Handles reassigning
>> + * newDef for persistent pools, and removing and freeing the object
>> + * for transient pools.
>> + *
>> + * Returns true if pool was removed from driver->pools
>> + */
>> +static bool
>> +storagePoolSetInactive(virStoragePoolObjPtr pool)
> 
> Can be void (virStoragePoolObjPtr *pool) and clear the original pointer
> if it was freed.

That is what Jovanka's similar patch did, but after playing with it some I
changed it to this. IMO it's safer to require the caller to set pool=NULL,
otherwise it isn't exactly clear just scanning the caller's code that pool can
become NULL, possibly leading to accidental NULL dereference if the code is
extended in the future, or new uses of the storagePoolSetInactive are added.
(I probably should have strapped on an ATTRIBUTE_RETURN_CHECK to be extra safe)

But I'm not married to the idea, so if you still prefer the other way I can
change it.

Thanks,
Cole




More information about the libvir-list mailing list