Em Mon, Jan 20, 2020 at 05:15:54PM +0300, Cengiz Can escreveu: > `tools/perf/util/map.c` has a function named `maps__insert` that > acquires a write lock if its in multithread context. > > Even though this lock is released when function successfully completes, > there's a branch that is executed when `maps_by_name == NULL` that > returns from this function without releasing the write lock. > > Added an `up_write` to release the lock when this happens. > > Signed-off-by: Cengiz Can <cengiz@xxxxxxxxxx> > --- > > Hello Arnaldo, > > I'm not exactly sure about the order that we must call up_write here. > > Please tell me if the `__maps__free_maps_by_name` frees the > `rw_semaphore`. If that's the case, should we change the order to unlock and free? No it doesn't free the rw_semaphore, that is in 'struct maps', what is being freed is just something protected by rw_semaphore, maps->maps_by_name, so your patch is right and I'm applying it, thanks. - Arnaldo > Thanks! > > tools/perf/util/map.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c > index fdd5bddb3075..f67960bedebb 100644 > --- a/tools/perf/util/map.c > +++ b/tools/perf/util/map.c > @@ -549,6 +549,7 @@ void maps__insert(struct maps *maps, struct map *map) > > if (maps_by_name == NULL) { > __maps__free_maps_by_name(maps); > + up_write(&maps->lock); > return; > } > > -- > 2.25.0 > -- - Arnaldo