]> sourceware.org Git - libabigail.git/commit
Fix qualified name caching for some types
authorDodji Seketeli <dodji@redhat.com>
Wed, 4 Jan 2017 23:15:40 +0000 (00:15 +0100)
committerDodji Seketeli <dodji@redhat.com>
Thu, 5 Jan 2017 11:26:20 +0000 (12:26 +0100)
commitab37f767b76eb9a5a34da7436ab3b597f903d2fe
tree6a5150d26c70efd254bcf81e0dd56ffb44253237
parentbf62a050c7a5b764d9c710aab6b987b8b04b5563
Fix qualified name caching for some types

When ::get_qualified_name() is invoked for some types, the value is
cached for performance reasons.

One thing to keep in mind is that the structure of a type can change
between the time when the type is first built and the time when it's
canonicalized.  This is because the type can be built progressively,
with sub-types being added over time until the type is fully built.
Then it can be canonicalized.

So if ::get_qualified_name is invoked on a non-canonicalized type and
the result is cached, then that result might not reflect the state of
the type *after* its canonicalized.  So the cached value might be
wrong.

To address that issue, the solution is to *not* cache the result of
::get_qualified_name() until the type is canonicalized.  After the
type is canonicalized and so we know the structur of the type won't
change, then the result of ::get_qualified_name is cached.

And this is what this patch does for qualified, pointer and array
types.

Note that the necessary update to the regression test suite is not
provided with this patch.  It's provided by a separate patch at the
end of the current series of patches.

* src/abg-ir.cc ({qualified, pointer,
array}_type_def::get_qualified_name): Don't cache internal and
non-internal qualified name when the type is not canonicalized.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
src/abg-ir.cc
This page took 0.031098 seconds and 5 git commands to generate.