This is an automated email from the ASF dual-hosted git repository.

liuhan pushed a commit to branch tmp_disable_reading
in repository https://gitbox.apache.org/repos/asf/skywalking-rover.git


The following commit(s) were added to refs/heads/tmp_disable_reading by this 
push:
     new b26f654  add mutex
b26f654 is described below

commit b26f65489cb3b82c7389546923fce80a612ad0e2
Author: mrproliu <[email protected]>
AuthorDate: Thu Dec 19 11:52:43 2024 +0800

    add mutex
---
 pkg/tools/btf/linker.go | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/pkg/tools/btf/linker.go b/pkg/tools/btf/linker.go
index 867d84e..bdbd7a6 100644
--- a/pkg/tools/btf/linker.go
+++ b/pkg/tools/btf/linker.go
@@ -83,6 +83,7 @@ type Linker struct {
        closeOnce sync.Once
 
        linkedUProbes map[string]bool
+       linkMutex     sync.Mutex
 }
 
 func NewLinker() *Linker {
@@ -136,6 +137,8 @@ func (m *Linker) AddSysCallWithKProbe(call string, linkK 
LinkFunc, p *ebpf.Progr
        if p == nil {
                return
        }
+       m.linkMutex.Lock()
+       defer m.linkMutex.Unlock()
        kprobe, err := linkK(syscallPrefix+call, p, nil)
 
        if err != nil {
@@ -147,10 +150,13 @@ func (m *Linker) AddSysCallWithKProbe(call string, linkK 
LinkFunc, p *ebpf.Progr
 }
 
 func (m *Linker) AddTracePoint(sys, name string, p *ebpf.Program) {
+       m.linkMutex.Lock()
+       defer m.linkMutex.Unlock()
        l, e := link.Tracepoint(sys, name, p, nil)
        if e != nil {
                m.errors = multierror.Append(m.errors, fmt.Errorf("open %s 
error: %v", name, e))
        } else {
+               log.Debugf("attach to the tracepoint: sys: %s, name: %s", sys, 
name)
                m.closers = append(m.closers, l)
        }
 }
@@ -264,6 +270,8 @@ func (u *UProbeExeFile) AddLinkWithType(symbol string, 
enter bool, p *ebpf.Progr
 }
 
 func (u *UProbeExeFile) addLinkWithType0(symbol string, enter bool, p 
*ebpf.Program, customizeAddress uint64) (link.Link, error) {
+       u.linker.linkMutex.Lock()
+       defer u.linker.linkMutex.Unlock()
        // check already linked
        uprobeIdentity := fmt.Sprintf("%s_%s_%t_%d", u.addr, symbol, enter, 
customizeAddress)
        if u.linker.linkedUProbes[uprobeIdentity] {

Reply via email to