[libvirt] RFC: Use __attribute__ ((cleanup) in libvirt ?

Jim Fehlig jfehlig at suse.com
Thu Jan 12 00:08:28 UTC 2017


On 01/09/2017 09:58 AM, Daniel P. Berrange wrote:
> For those who don't already know, GCC and CLang both implement a C language
> extension that enables automatic free'ing of resources when variables go
> out of scope. This is done by annotating the variable with the "cleanup"
> attribute, pointing to a function the compiler will wire up a call to when
> unwinding the stack. Since the annotation points to an arbitrary user
> defined function, you're not limited to simple free() like semantics. The
> cleanup function could unlock a mutex, or decrement a reference count, etc
>
> This annotation is used extensively by systemd, and libguestfs, amongst
> other projects. This obviously doesn't bring full garbage collection to
> C, but it does enable the code to be simplified. By removing the need to
> put in many free() (or equiv) calls to cleanup state, the "interesting"
> logic in the code stands out more, not being obscured by cleanup calls
> and goto jumps.
>
> I'm wondering what people think of making use of this in libvirt ?
>
> To my mind the only real reason to *not* use it, would be to maintain
> code portability to non-GCC/non-CLang compilers. OS-X, *BSD and *Linux
> all use GCC or CLang or both, so its a non-issue there. So the only place
> this could cause pain is people building libvirt on Win32, who are using
> the Microsoft compilers instead og GCC.

With distro/maintenance hat on, another -.5 is (potentially) more conflicts when 
backporting upstream fixes to older branches/releases.

I do prefer the simplified pattern in this proposal, but like others am on the 
fence.

Regards,
Jim





More information about the libvir-list mailing list