From: Alexey Milovidov Date: Mon, 10 Apr 2023 02:19:01 +0000 (+0200) Subject: Fix profile_open_file() last_stat locking X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F1452%2Fhead;p=thirdparty%2Fkrb5.git 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) --- 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);