Skip to content

Commit ab2c742

Browse files
captain5050acmel
authored andcommitted
perf dso: Minor refactor to allow clang's Wthread-safety analysis
The pattern: ``` if (x) { lock(...) } block1; if (x) { unlock(...) } ``` defeats clang's -Wthread-safety analysis where it complains of locks held on one path and not another. Add helper functions for "block1" then restructure as: ``` if (x) { lock(...); block1(); unlock(...); } else { block1(); } ``` Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Bill Wendling <morbo@google.com> Cc: Chaitanya S Prakash <chaitanyas.prakash@arm.com> Cc: Fei Lang <langfei@huawei.com> Cc: Howard Chu <howardchu95@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Justin Stitt <justinstitt@google.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephen Brennan <stephen.s.brennan@oracle.com> Link: https://lore.kernel.org/r/20250519224645.1810891-1-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 parent ba5f102 commit ab2c742

1 file changed

Lines changed: 26 additions & 19 deletions

File tree

tools/perf/util/dso.c

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,16 @@ struct dso *machine__findnew_kernel(struct machine *machine, const char *name,
13491349
return dso;
13501350
}
13511351

1352+
static void __dso__set_long_name_id(struct dso *dso, const char *name, bool name_allocated)
1353+
{
1354+
if (dso__long_name_allocated(dso))
1355+
free((char *)dso__long_name(dso));
1356+
1357+
RC_CHK_ACCESS(dso)->long_name = name;
1358+
RC_CHK_ACCESS(dso)->long_name_len = strlen(name);
1359+
dso__set_long_name_allocated(dso, name_allocated);
1360+
}
1361+
13521362
static void dso__set_long_name_id(struct dso *dso, const char *name, bool name_allocated)
13531363
{
13541364
struct dsos *dsos = dso__dsos(dso);
@@ -1362,18 +1372,11 @@ static void dso__set_long_name_id(struct dso *dso, const char *name, bool name_a
13621372
* renaming the dso.
13631373
*/
13641374
down_write(&dsos->lock);
1365-
}
1366-
1367-
if (dso__long_name_allocated(dso))
1368-
free((char *)dso__long_name(dso));
1369-
1370-
RC_CHK_ACCESS(dso)->long_name = name;
1371-
RC_CHK_ACCESS(dso)->long_name_len = strlen(name);
1372-
dso__set_long_name_allocated(dso, name_allocated);
1373-
1374-
if (dsos) {
1375+
__dso__set_long_name_id(dso, name, name_allocated);
13751376
dsos->sorted = false;
13761377
up_write(&dsos->lock);
1378+
} else {
1379+
__dso__set_long_name_id(dso, name, name_allocated);
13771380
}
13781381
}
13791382

@@ -1451,6 +1454,16 @@ void dso__set_long_name(struct dso *dso, const char *name, bool name_allocated)
14511454
dso__set_long_name_id(dso, name, name_allocated);
14521455
}
14531456

1457+
static void __dso__set_short_name(struct dso *dso, const char *name, bool name_allocated)
1458+
{
1459+
if (dso__short_name_allocated(dso))
1460+
free((char *)dso__short_name(dso));
1461+
1462+
RC_CHK_ACCESS(dso)->short_name = name;
1463+
RC_CHK_ACCESS(dso)->short_name_len = strlen(name);
1464+
dso__set_short_name_allocated(dso, name_allocated);
1465+
}
1466+
14541467
void dso__set_short_name(struct dso *dso, const char *name, bool name_allocated)
14551468
{
14561469
struct dsos *dsos = dso__dsos(dso);
@@ -1464,17 +1477,11 @@ void dso__set_short_name(struct dso *dso, const char *name, bool name_allocated)
14641477
* renaming the dso.
14651478
*/
14661479
down_write(&dsos->lock);
1467-
}
1468-
if (dso__short_name_allocated(dso))
1469-
free((char *)dso__short_name(dso));
1470-
1471-
RC_CHK_ACCESS(dso)->short_name = name;
1472-
RC_CHK_ACCESS(dso)->short_name_len = strlen(name);
1473-
dso__set_short_name_allocated(dso, name_allocated);
1474-
1475-
if (dsos) {
1480+
__dso__set_short_name(dso, name, name_allocated);
14761481
dsos->sorted = false;
14771482
up_write(&dsos->lock);
1483+
} else {
1484+
__dso__set_short_name(dso, name, name_allocated);
14781485
}
14791486
}
14801487

0 commit comments

Comments
 (0)