Hi,
On Wed, Jul 17, 2024 at 06:34:05PM -0400, Aaron Merey wrote:
> From: Heather McIntyre <[email protected]>
>
> * (__libdw_find_split_unit): Add lock for cu->split.
>
> Signed-off-by: Heather S. McIntyre <[email protected]>
> Signed-off-by: Aaron Merey <[email protected]>
> Signed-off-by: Mark Wielaard <[email protected]>
>
> ---
>
> v2 changes:
> Locking applied to __libdw_find_split_unit instead of try_split_file.
>
> libdw/libdw_find_split_unit.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
Would be nice to have the split_lock definition from patch "lib: Add
eu_tsearch, eu_tfind, eu_tdelete and eu_tdestroy " here to make this
patch self-contained.
> diff --git a/libdw/libdw_find_split_unit.c b/libdw/libdw_find_split_unit.c
> index 67d31a9c..eb3d88d7 100644
> --- a/libdw/libdw_find_split_unit.c
> +++ b/libdw/libdw_find_split_unit.c
> @@ -150,9 +150,14 @@ Dwarf_CU *
> internal_function
> __libdw_find_split_unit (Dwarf_CU *cu)
> {
> + rwlock_wrlock(cu->split_lock);
> +
> /* Only try once. */
> if (cu->split != (Dwarf_CU *) -1)
> - return cu->split;
> + {
> + rwlock_unlock(cu->split_lock);
> + return cu->split;
> + }
>
> /* We need a skeleton unit with a comp_dir and [GNU_]dwo_name attributes.
> The split unit will be the first in the dwo file and should have the
> @@ -207,5 +212,6 @@ __libdw_find_split_unit (Dwarf_CU *cu)
> if (cu->split == (Dwarf_CU *) -1)
> cu->split = NULL;
>
> + rwlock_unlock(cu->split_lock);
> return cu->split;
> }
Again, just as a style issue, because it looks like the unlocked read
is fine in this case, but I really like the Dwarf_CU *result; result =
cu->split; unlock; return result; idiom here.
Cheers,
Mark