Hi Arnaldo, On Wed, May 22, 2019 at 10:18:32AM -0300, Arnaldo Carvalho de Melo wrote: > Em Wed, May 22, 2019 at 02:32:48PM +0900, Namhyung Kim escreveu: > > It seems that the current code lacks holding the namespace lock in > > thread__namespaces(). Otherwise it can see inconsistent results. > > > > Signed-off-by: Namhyung Kim <namhy...@kernel.org> > > --- > > tools/perf/util/thread.c | 15 +++++++++++++-- > > 1 file changed, 13 insertions(+), 2 deletions(-) > > > > diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c > > index 403045a2bbea..b413ba5b9835 100644 > > --- a/tools/perf/util/thread.c > > +++ b/tools/perf/util/thread.c > > @@ -133,7 +133,7 @@ void thread__put(struct thread *thread) > > } > > } > > > > -struct namespaces *thread__namespaces(const struct thread *thread) > > +static struct namespaces *__thread__namespaces(const struct thread *thread) > > { > > if (list_empty(&thread->namespaces_list)) > > return NULL; > > @@ -141,10 +141,21 @@ struct namespaces *thread__namespaces(const struct > > thread *thread) > > return list_first_entry(&thread->namespaces_list, struct namespaces, > > list); > > } > > > > +struct namespaces *thread__namespaces(const struct thread *thread) > > +{ > > + struct namespaces *ns; > > + > > + down_read((struct rw_semaphore *)&thread->namespaces_lock); > > + ns = __thread__namespaces(thread); > > + up_read((struct rw_semaphore *)&thread->namespaces_lock); > > + > > Humm, so we need to change thread__namespaces() to remove that const > instead of throwing it away with that cast, right?
Yes, that's possible too. Note that thread__comm_str() has the same issue as well. Thanks, Namhyung