common: rewrite caching in Linux P_cplus_demangle()
authorJosh Stone <jistone@redhat.com>
Thu, 30 Jul 2015 22:02:08 +0000 (15:02 -0700)
committerJosh Stone <jistone@redhat.com>
Thu, 30 Jul 2015 22:25:51 +0000 (15:25 -0700)
commit0303a1f5666ec72fac663286377b90a6fff9efc9
tree07db40a38bcee84bdc8de67452ca2a1461a292fe
parent628feeb90a12c1e329bd326be11a597646e9a461
common: rewrite caching in Linux P_cplus_demangle()

This had a bug where a last_typed value was saved even for parameter
includeTypes==false, where cplus_demangle opts lacked DMGL_PARAMS.
Similarly, the nativeCompiler parameter wasn't considered at all for
caching.

This caused strange issues in boost::multi_index, where its internal
rehashing was sometimes allocating buffers incorrectly for its buckets.
This was because Symbol->getTypedName() was returning different values
depending on how P_cplus_demangle was cached, and silently changing keys
in a map is no good at all.

P_cplus_demangle caching now requires an exact match on all three input
parameters before returning the saved result.
common/src/linuxKludges.C