[Libvir] [PATCH] deep copy dom structure

Daniel P. Berrange berrange at redhat.com
Mon Mar 31 12:02:49 UTC 2008

On Mon, Mar 31, 2008 at 11:00:56AM +0100, Richard W.M. Jones wrote:
> What problem are you trying to solve?

AFAICT, the problem is that the Domain/Network  objects are being free'd
before the remote daemon has a chance to serialze the Error object into
XDR format. So it is accessing free'd memory when serializing the dom/net
field in the Error object & geting back garbage.

> The 'conn', 'dom' and 'net' fields in a virterror can't be accessed
> safely, particularly from a garbage-collected language.  The only safe
> thing one could do with them is a physical equality test on the
> pointer against an existing conn/dom/net pointer.
> But the solution isn't to copy the dom object, since in a GC-d
> language someone could grab a handle to the copied dom which would
> have a different lifetime from the error object.  If anything the
> solution would be to remove those fields from the error object since
> they are highly unlikely to be useful in any real world application.
> We can't do this because of backwards compatibility promises but we
> should instead deprecate them.

We should at the very least NULL-ify the dom/net fields in the Error 
object associated with the Connection when we free the Domain/Network
object. We also probably need to re-arrange the remote daemon code a
little so that it serializes to XDR format before the Domain/Network object
are free'd.

I agree that deep copying isn't the answer here & messes up the reference
counting and will cause potential memory leaks. 

|: Red Hat, Engineering, Boston   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

More information about the libvir-list mailing list