[libvirt] [PATCH v3 02/10] Convert public datatypes to inherit from virObject

Eric Blake eblake at redhat.com
Mon Aug 6 16:28:06 UTC 2012


On 08/06/2012 05:52 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> This converts the following public API datatypes to use the
> virObject infrastructure:

> +virGetConnect(void)
> +{
>      virConnectPtr ret;
>  
> -    if (VIR_ALLOC(ret) < 0) {
> -        virReportOOMError();
> -        goto failed;
> -    }
> +    if (virDataTypesInitialize() < 0)
> +        return NULL;
> +
> +    if (!(ret = virObjectNew(virConnectClass)))
> +        return NULL;
> +
>      if (virMutexInit(&ret->lock) < 0) {
>          VIR_FREE(ret);
> -        goto failed;
> +        return NULL;

Theoretically, we have left non-poisoned memory on the heap, and
careless memory management could happen to revive the pointer and then
operate on it; but as that would imply a chain of multiple bugs, I'm not
too worried about the use of VIR_FREE(ret) here instead.  Poisoning
before free() is only a debug aid, after all.


> +# define VIR_IS_CONNECT(obj) \
> +    (virObjectIsClass((obj), virConnectClass))

Parens around 'obj' are redundant in this particular context, but it's
not a bad habit to have in general when writing macros, so I don't care
if you leave them.

> +
> +# define VIR_IS_DOMAIN(obj) \
> +    (virObjectIsClass((obj), virDomainClass))
> +# define VIR_IS_CONNECTED_DOMAIN(obj) \
> +    (VIR_IS_DOMAIN(obj) && VIR_IS_CONNECT((obj)->conn))

For example, in _this_ macro, the parens around the second 'obj' are
mandatory.

> @@ -1429,14 +1429,16 @@ error:
>   * matching virConnectClose, and all other references will be released
>   * after the corresponding operation completes.
>   *
> - * Returns the number of remaining references on success
> - * (positive implies that some other call still has a reference open,
> - * 0 implies that no references remain and the connection is closed),
> - * or -1 on failure.  It is possible for the last virConnectClose to
> - * return a positive value if some other object still has a temporary
> - * reference to the connection, but the application should not try to
> - * further use a connection after the virConnectClose that matches the
> - * initial open.
> + * Returns a positive number if at least 1 reference remains on
> + * success. The returned value should not be assumed to be the total
> + * reference count. A return of 0 implies no references remain and
> + * the connection is closed & memory has been freed. A return of -1

s/&/and/ - no need to abbreviate in formal documentation.

ACK with the doc fix.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120806/23e71ab9/attachment-0001.sig>


More information about the libvir-list mailing list