[libvirt] [PATCH 00/34] network events feature v2

Michal Privoznik mprivozn at redhat.com
Thu Dec 12 16:05:45 UTC 2013


On 11.12.2013 20:28, Eric Blake wrote:
> On 12/11/2013 12:15 PM, Eric Blake wrote:
> 
>> struct _virObjectEvent {
>>     virObject parent;
>>     int eventID;
>>     virObjectMeta meta;
>> };
>>
>> Only has alignment specified by virObject (which in turn is unsigned
>> int, int, void*),
> 
> struct _virObject {
>     unsigned int magic;
>     int refs;
>     virClassPtr klass;
> };
> 
> 
>> I think one possible solution would be as simple as altering
>> src/util/virobject.h to change 'magic' from 'unsigned int' to 'unsigned
>> long long' - then ALL virObject structs will be forcefully aligned to
>> the worst case between void* and long long, so that any subclass can use
>> long long without requiring stricter alignment than the parent class,
>> and so that downcasting code like domain_event.c no longer warns.  But
>> it does make every object consume more memory on 64-bit platforms (from
>> 16 bytes into 24 bytes), is that okay?
> 
> Or maybe even change _virObject to contain a union:
> 
> struct _virObject {
>     union {
>         long long align;
>         struct {
>             unsigned int magic;
>             int refs;
>         } s;
>     } u;
>     virClassPtr klass;
> }

Yep. I can confirm that this works. This and all the subsequent code
adaptations made me able to compile again. Will you post it as a patch
please?

Michal




More information about the libvir-list mailing list