Re: [PATCH v3 09/18] perf ui: Update use of pthread mutex

From: Adrian Hunter
Date: Fri Aug 26 2022 - 15:20:53 EST


On 26/08/22 22:00, Namhyung Kim wrote:
> On Fri, Aug 26, 2022 at 11:53 AM Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
>> Below seems adequate for now, at least logically, but maybe it
>> would confuse clang thread-safety analysis?
>
> I think it's not just about locks, the exit_browser should bail out early
> if the setup code was not called.

In those cases, use_browser is 0 or -1 unless someone has inserted
an invalid perf config like "tui.script=on" or "gtk.script=on".
So currently, in cases where exit_browser() is called without
setup_browser(), it does nothing. Which means it is only the
unconditional mutex_destroy() that needs to be conditional.

>
> Thanks,
> Namhyung
>
>
>>
>> diff --git a/tools/perf/ui/setup.c b/tools/perf/ui/setup.c
>> index 25ded88801a3..6d81be6a349e 100644
>> --- a/tools/perf/ui/setup.c
>> +++ b/tools/perf/ui/setup.c
>> @@ -73,9 +73,17 @@ int stdio__config_color(const struct option *opt __maybe_unused,
>> return 0;
>> }
>>
>> +/*
>> + * exit_browser() can get called without setup_browser() having been called
>> + * first, so it is necessary to keep track of whether ui__lock has been
>> + * initialized.
>> + */
>> +static bool ui__lock_initialized;
>> +
>> void setup_browser(bool fallback_to_pager)
>> {
>> mutex_init(&ui__lock);
>> + ui__lock_initialized = true;
>> if (use_browser < 2 && (!isatty(1) || dump_trace))
>> use_browser = 0;
>>
>> @@ -118,5 +126,6 @@ void exit_browser(bool wait_for_ok)
>> default:
>> break;
>> }
>> - mutex_destroy(&ui__lock);
>> + if (ui__lock_initialized)
>> + mutex_destroy(&ui__lock);
>> }
>>