Re: virDomainInfo marshalling prolem

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

 



ïOkay,

I have corrected to this structure :

public class DomainInfo
   {
       /// <summary>
       /// The running state, one of virDomainState.
       /// </summary>
       private byte state;
       /// <summary>
       /// The maximum memory in KBytes allowed.
       /// </summary>
       public ulong maxMem;
       /// <summary>
       /// The memory in KBytes used by the domain.
       /// </summary>
       public ulong memory;
       /// <summary>
       /// The number of virtual CPUs for the domain.
       /// </summary>
       public ushort nrVirtCpu;
       /// <summary>
       /// The CPU time used in nanoseconds.
       /// </summary>
       public ulong cpuTime;
       /// <summary>
       /// The running state, one of virDomainState.
       /// </summary>
       public DomainState State { get { return (DomainState)state; } }
   }

And now it works in 64bits but not in 32bits :S

Arnaud

--------------------------------------------------
From: "Matthias Bolte" <matthias.bolte@xxxxxxxxxxxxxx>
Sent: Friday, October 29, 2010 4:19 PM
To: <arnaud.champion@xxxxxxxxxx>
Cc: <libvir-list@xxxxxxxxxx>
Subject: Re:  virDomainInfo marshalling prolem

2010/10/29  <arnaud.champion@xxxxxxxxxx>:
Hi,

I am working on the marshaling of the virDomainInfo structure. I have
marshalled it in this way :


///

<summary>

/// Structure to handle domain informations

/// </summary>

[

StructLayout(LayoutKind.Sequential)]

public class DomainInfo

{

    /// <summary>
    /// The running state, one of virDomainState.
    /// </summary>
    private Byte state;
    /// <summary>
    /// The maximum memory in KBytes allowed.
    /// </summary>
    public int maxMem;
    /// <summary>
    /// The memory in KBytes used by the domain.
    /// </summary>
    public int memory;
    /// <summary>
    /// The number of virtual CPUs for the domain.
    /// </summary>
    public short nrVirtCpu;
    /// <summary>
    /// The CPU time used in nanoseconds.
    /// </summary>
    public long cpuTime;
    /// <summary>
    /// The running state, one of virDomainState.
    /// </summary>
    public DomainState State { get { return (DomainState)state; } }

}

It work fine in 32 bits, but not in 64 bits, it seems that packing in 64
bits is different so infos are not in order. Am I right ?


In the struct looks like this

struct _virDomainInfo {
unsigned char state; /* the running state, one of virDomainState */
   unsigned long maxMem;       /* the maximum memory in KBytes allowed */
unsigned long memory; /* the memory in KBytes used by the domain */ unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */
   unsigned long long cpuTime; /* the CPU time used in nanoseconds */
};

but you mapped unsigned long to int. First of all you should map this
to an unsigned type. You also lost the unsigned for some other
members.

The problem probably is that long in C is 32bit on a 32bit platform an
64bit on a 64bit platform. You mapped it to int that is always 32bit
in C#, when I looked it up correctly.

Matthias


--
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]