aboutsummaryrefslogtreecommitdiff
path: root/ld/NEWS
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2020-06-02 21:48:12 +0100
committerNick Alcock <nick.alcock@oracle.com>2020-07-22 17:57:43 +0100
commit5ceee3dba3422bc8de49768c0c2d8f2608672fe7 (patch)
treec01783365add08aecbc1da2e122fd5dedf2aacd6 /ld/NEWS
parent809f6eb3321edb91fcc96b1f8353dbfe2f762fa7 (diff)
downloadgdb-5ceee3dba3422bc8de49768c0c2d8f2608672fe7.zip
gdb-5ceee3dba3422bc8de49768c0c2d8f2608672fe7.tar.gz
gdb-5ceee3dba3422bc8de49768c0c2d8f2608672fe7.tar.bz2
libctf, hash: improve insertion of existing keys into dynhashes
Right now, if you insert a key/value pair into a dynhash, the old slot's key is freed and the new one always assigned. This seemed sane to me when I wrote it, but I got it wrong time and time again. It's much less confusing to free the key passed in: if a key-freeing function was passed, you are asserting that the dynhash owns the key in any case, so if you pass in a key it is always buggy to assume it sticks around. Freeing the old key means that you can't even safely look up a key from out of a dynhash and hold on to it, because some other matching key might force it to be freed at any time. In the new model, you can always get a key out of a dynhash with ctf_dynhash_lookup_kv and hang on to it until the kv-pair is actually deleted from the dynhash. In the old model the pointer to the key might be freed at any time if a matching key was inserted. libctf/ * ctf-hash.c (ctf_hashtab_insert): Free the key passed in if there is a key-freeing function and the key already exists.
Diffstat (limited to 'ld/NEWS')
0 files changed, 0 insertions, 0 deletions