From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> We'll switch to adding the 'struct cu' instance to the 'struct cus' list early, under the lock, to keep the order from the original DWARF file and then LSK_KEEPIT will just leave it there while LSK_DELETE will first remove it from the cus list, under cus lock, to then call cu__delete(). Cc: Alan Maguire <alan.maguire@xxxxxxxxxx> Cc: Kui-Feng Lee <kuifeng@xxxxxx> Cc: Thomas Weißschuh <linux@xxxxxxxxxxxxxx> Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> --- dwarves.c | 13 +++++++++++++ dwarves.h | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/dwarves.c b/dwarves.c index 654a8085e9252a21..3cd300db97973ce4 100644 --- a/dwarves.c +++ b/dwarves.c @@ -479,6 +479,19 @@ uint32_t cus__nr_entries(const struct cus *cus) return cus->nr_entries; } +void __cus__remove(struct cus *cus, struct cu *cu) +{ + cus->nr_entries--; + list_del_init(&cu->node); +} + +void cus__remove(struct cus *cus, struct cu *cu) +{ + cus__lock(cus); + __cus__remove(cus, cu); + cus__unlock(cus); +} + void __cus__add(struct cus *cus, struct cu *cu) { cus->nr_entries++; diff --git a/dwarves.h b/dwarves.h index 42b00bc1341e66cb..9dc9cb4b074b5d33 100644 --- a/dwarves.h +++ b/dwarves.h @@ -173,6 +173,10 @@ int cus__load_dir(struct cus *cus, struct conf_load *conf, const int recursive); void __cus__add(struct cus *cus, struct cu *cu); void cus__add(struct cus *cus, struct cu *cu); + +void __cus__remove(struct cus *cus, struct cu *cu); +void cus__remove(struct cus *cus, struct cu *cu); + void cus__print_error_msg(const char *progname, const struct cus *cus, const char *filename, const int err); struct cu *cus__find_pair(struct cus *cus, const char *name); -- 2.44.0