[Libosinfo] [PATCH 6/8] list: Fix replacement in osinfo_list_add
Daniel P. Berrange
berrange at redhat.com
Fri Nov 6 13:35:05 UTC 2015
On Fri, Nov 06, 2015 at 02:23:17PM +0100, Christophe Fergeau wrote:
> Hi,
>
> On Thu, Nov 05, 2015 at 04:59:20PM +0000, Daniel P. Berrange wrote:
> >
> > This makes sense purely from the POV of correctness of the API, but
> > I think there is another bug hiding here somewhere, because we AFAIR
> > we should never get in a situation where we are replacing an existing
> > entity in the list. When loading entities from the XML, we always
> > check to see if the entity already exists, and if so re-use it rather
> > than creating a new one. IOW, while this fix is valid, fixing it is
> > masking what I think might be a more serious flaw elsewhere, that I
> > would see to identify.
>
> I ran a few more tests (added an assert in osinfo_list_add() if the
> entity is already present in the list), and it turns out this happens
> precisely because we reuse OS entities from the XML. We reuse what I'd
> call 'top-level' entities, but we do not attempt to reuse entities used
> to represent <media> nodes, or <tree> nodes, ... when we are parsing an
> OS entity. So when we encounter a duplicate OS entity, we try to reuse
> the existing one, and this entity has duplicates for the media/tree/...
> we are trying to add, which triggers this misbehaviour.
> The full list of entities which were duplicate are:
> - OsinfoMedia
> - OsinfoDeviceDriver
> - OsinfoTree
> - OsinfoOsVariant
> - OsinfoInstallScript
Ahhh, ok, so it is non-top level entities that are the problem only.
> Looking at the loading code for install scripts, there might be a bug
> there as it may not be trying to reuse pre-existing entities.
The loader calls osinfo_loader_get_install_script() so it is not
creating duplicate OsinfoInstallSCript objects.
However, we setup a relationship between OsinfoOs and the install
script, and that's where the duplication comes. This is OK I think.
ACK to your original patch, all these non-top level cases are harmless
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the Libosinfo
mailing list