Re: RFC: Use __attribute__ ((cleanup) in libvirt ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jan 10, 2017 at 10:00:31AM +0000, Daniel P. Berrange wrote:
> If we mandate use of gcc / clang, then we wouldn't need to hide it
> behind a macro - we'd be able to use it inline. That said, using a
> macro makes it smaller and gives a bit of standardization. eg with
> libguestfs style:
> 
>   #define CLEANUP_FREE __attribute__((cleanup(free)))
>   #define CLEANUP_OBJECT_UNREF __attribute__((cleanup(virObjectUnref)))
> 
>   CLEANUP_FREE char *str;
>   CLEANUP_OBJECT_UNREF virDomainPtr dom;
> 
> vs full inline style:
> 
>   __attribute__((cleanup(free))) char *str;
>   __attribute__((cleanup(virObjectUnref))) virDomainPtr dom;
> 
> That said I see systemd took a halfway house
> 
>   #define _cleanup_(x) __attribute__((cleanup(x)))
> 
>   _cleanup(free) char *str;
>   _cleanup(virObjectUnref) virDomainPtr dom;

I think it's not quite as simple as that because GCC passes
the pointer to the pointer.  libguestfs uses:

#define CLEANUP_FREE __attribute__((cleanup(guestfs_int_cleanup_free)))

...

void
guestfs_int_cleanup_free (void *ptr)
{
  free (* (void **) ptr);
}

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux