From 3466589de7de7e74aa53c560b83313ae7d2f8b6f Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Mon, 10 Apr 2023 04:19:01 +0200 Subject: [PATCH] Fix profile_open_file() last_stat locking Commit 53d6d0d64e96b84b57b7446a787e683312e2a529 changed profile_open_file() to force a stat() when reusing a profile object, by setting the last_stat field to 0 on the data object. The last_stat field is controlled by the data object mutex (unlike the refcount field, which is controlled by g_shared_trees_mutex). Lock the data object before setting last_stat. [ghudson@mit.edu: switched to using profile_update_data_file_locked() so we don't lock and unlock the data object twice; rewrote commit message] ticket: 9184 (new) --- src/util/profile/prof_file.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/util/profile/prof_file.c b/src/util/profile/prof_file.c index 8b0b2bb441..4ff1538fdf 100644 --- a/src/util/profile/prof_file.c +++ b/src/util/profile/prof_file.c @@ -220,9 +220,11 @@ errcode_t profile_open_file(const_profile_filespec_t filespec, } if (data) { data->refcount++; - data->last_stat = 0; /* Make sure to stat when updating. */ k5_mutex_unlock(&g_shared_trees_mutex); - retval = profile_update_file_data(data, NULL); + k5_mutex_lock(&data->lock); + data->last_stat = 0; /* Make sure to stat when updating. */ + retval = profile_update_file_data_locked(data, NULL); + k5_mutex_unlock(&data->lock); free(expanded_filename); if (retval) { profile_dereference_data(data); -- 2.47.3