Hi Aaron,

On Sun, Jan 19, 2025 at 10:20:30PM -0500, Aaron Merey wrote:
>       * libdw/dwarf_getsrcfiles.c (dwarf_getsrcfiles): Use dwarf_lock.
>
> ---
>  libdw/dwarf_getsrcfiles.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/libdw/dwarf_getsrcfiles.c b/libdw/dwarf_getsrcfiles.c
> index 24e4b7d2..3029ce69 100644
> --- a/libdw/dwarf_getsrcfiles.c
> +++ b/libdw/dwarf_getsrcfiles.c
> @@ -47,9 +47,10 @@ dwarf_getsrcfiles (Dwarf_Die *cudie, Dwarf_Files **files, 
> size_t *nfiles)
>      }
>  
>    int res = -1;
> +  struct Dwarf_CU *const cu = cudie->cu;
> +  mutex_lock (cudie->cu->dbg->dwarf_lock);

OK, another Dwarf_Files access, now getting at the dwarf_lock another
way through the cu.

>    /* Get the information if it is not already known.  */
> -  struct Dwarf_CU *const cu = cudie->cu;
>    if (cu->files == NULL)
>      {
>        /* For split units there might be a simple file table (without lines).
> @@ -96,7 +97,10 @@ dwarf_getsrcfiles (Dwarf_Die *cudie, Dwarf_Files **files, 
> size_t *nfiles)
>         Dwarf_Off debug_line_offset;
>         if (__libdw_formptr (stmt_list, IDX_debug_line, DWARF_E_NO_DEBUG_LINE,
>                              NULL, &debug_line_offset) == NULL)
> -         return -1;
> +         {
> +           mutex_unlock (cudie->cu->dbg->dwarf_lock);
> +           return -1;
> +         }
>  
>         res = __libdw_getsrcfiles (cu->dbg, debug_line_offset,
>                                    __libdw_getcompdir (cudie),

So is the lock to protect all paths through __libdw_getsrcfiles?

> @@ -115,8 +119,7 @@ dwarf_getsrcfiles (Dwarf_Die *cudie, Dwarf_Files **files, 
> size_t *nfiles)
>       *nfiles = cu->files->nfiles;
>      }
>  
> -  // XXX Eventually: unlocking here.
> -
> +  mutex_unlock (cudie->cu->dbg->dwarf_lock);
>    return res;
>  }
>  INTDEF (dwarf_getsrcfiles)
> -- 
> 2.47.1
> 

Reply via email to