lkml.org 
[lkml]   [2022]   [Jan]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
Subject[PATCH v2 2/4] perf dso: Make lock error check and add BUG_ONs
From
Make the pthread mutex on dso use the error check type. This allows
deadlock checking via the return type. Assert the returned value from
mutex lock is always 0.

Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/util/dso.c | 12 +++++++++---
tools/perf/util/symbol.c | 2 +-
2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index 9cc8a1772b4b..6beccffeef7b 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -784,7 +784,7 @@ dso_cache__free(struct dso *dso)
struct rb_root *root = &dso->data.cache;
struct rb_node *next = rb_first(root);

- pthread_mutex_lock(&dso->lock);
+ BUG_ON(pthread_mutex_lock(&dso->lock) != 0);
while (next) {
struct dso_cache *cache;

@@ -830,7 +830,7 @@ dso_cache__insert(struct dso *dso, struct dso_cache *new)
struct dso_cache *cache;
u64 offset = new->offset;

- pthread_mutex_lock(&dso->lock);
+ BUG_ON(pthread_mutex_lock(&dso->lock) != 0);
while (*p != NULL) {
u64 end;

@@ -1259,6 +1259,8 @@ struct dso *dso__new_id(const char *name, struct dso_id *id)
struct dso *dso = calloc(1, sizeof(*dso) + strlen(name) + 1);

if (dso != NULL) {
+ pthread_mutexattr_t lock_attr;
+
strcpy(dso->name, name);
if (id)
dso->id = *id;
@@ -1286,8 +1288,12 @@ struct dso *dso__new_id(const char *name, struct dso_id *id)
dso->root = NULL;
INIT_LIST_HEAD(&dso->node);
INIT_LIST_HEAD(&dso->data.open_entry);
- pthread_mutex_init(&dso->lock, NULL);
+ pthread_mutexattr_init(&lock_attr);
+ pthread_mutexattr_settype(&lock_attr, PTHREAD_MUTEX_ERRORCHECK);
+ pthread_mutex_init(&dso->lock, &lock_attr);
+ pthread_mutexattr_destroy(&lock_attr);
refcount_set(&dso->refcnt, 1);
+
}

return dso;
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index b2ed3140a1fa..43f47532696f 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1783,7 +1783,7 @@ int dso__load(struct dso *dso, struct map *map)
}

nsinfo__mountns_enter(dso->nsinfo, &nsc);
- pthread_mutex_lock(&dso->lock);
+ BUG_ON(pthread_mutex_lock(&dso->lock) != 0);

/* check again under the dso->lock */
if (dso__loaded(dso)) {
--
2.35.0.rc0.227.g00780c9af4-goog
\
 
 \ /
  Last update: 2022-01-25 21:47    [W:1.123 / U:0.228 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site