[07/15] dwarf_lineaddr.c: Add locking

Message ID 20250120032041.280173-7-amerey@redhat.com
State Dropped
Delegated to: Mark Wielaard
Headers
Series [01/15] Add eu_search_tree_init |

Commit Message

Aaron Merey Jan. 20, 2025, 3:20 a.m. UTC
  * libdw/dwarf_lineaddr.c (dwarf_lineaddr): Use dwarf_lock.

Signed-off-by: Aaron Merey <amerey@redhat.com>

---
 libdw/dwarf_lineaddr.c | 2 ++
 1 file changed, 2 insertions(+)
  

Comments

Mark Wielaard Jan. 23, 2025, 12:08 a.m. UTC | #1
Hi Aaron,

On Sun, Jan 19, 2025 at 10:20:33PM -0500, Aaron Merey wrote:
> 	* libdw/dwarf_lineaddr.c (dwarf_lineaddr): Use dwarf_lock.

Why is this necessary? It seems this function can only be called with a known/setup Dwarf_Line. Can it be concurrently changes at this point?

> Signed-off-by: Aaron Merey <amerey@redhat.com>
> 
> ---
>  libdw/dwarf_lineaddr.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/libdw/dwarf_lineaddr.c b/libdw/dwarf_lineaddr.c
> index 4e1952d3..bf81966c 100644
> --- a/libdw/dwarf_lineaddr.c
> +++ b/libdw/dwarf_lineaddr.c
> @@ -40,7 +40,9 @@ dwarf_lineaddr (Dwarf_Line *line, Dwarf_Addr *addrp)
>    if (line == NULL)
>      return -1;
>  
> +  mutex_lock (line->files->dbg->dwarf_lock);
>    *addrp =  line->addr;
> +  mutex_unlock (line->files->dbg->dwarf_lock);
>  
>    return 0;
>  }
> -- 
> 2.47.1
>
  
Aaron Merey Jan. 24, 2025, 2:17 a.m. UTC | #2
Hi Mark,

On Wed, Jan 22, 2025 at 7:08 PM Mark Wielaard <mark@klomp.org> wrote:
>
> On Sun, Jan 19, 2025 at 10:20:33PM -0500, Aaron Merey wrote:
> >       * libdw/dwarf_lineaddr.c (dwarf_lineaddr): Use dwarf_lock.
>
> Why is this necessary? It seems this function can only be called with a known/setup Dwarf_Line. Can it be concurrently changes at this point?

I previously saw dwarf_lineaddr get flagged by helgrind but currently
I'm unable to reproduce the error even when commenting out the lock.

Let's drop this patch until the concurrent changes are known to occur.

Aaron
  

Patch

diff --git a/libdw/dwarf_lineaddr.c b/libdw/dwarf_lineaddr.c
index 4e1952d3..bf81966c 100644
--- a/libdw/dwarf_lineaddr.c
+++ b/libdw/dwarf_lineaddr.c
@@ -40,7 +40,9 @@  dwarf_lineaddr (Dwarf_Line *line, Dwarf_Addr *addrp)
   if (line == NULL)
     return -1;
 
+  mutex_lock (line->files->dbg->dwarf_lock);
   *addrp =  line->addr;
+  mutex_unlock (line->files->dbg->dwarf_lock);
 
   return 0;
 }