@@ -283,60 +283,6 @@ func (pm *ProcessManager) handleNewInterpreter(pr process.Process, m *Mapping,
283283 return nil
284284}
285285
286- // handleNewObservers processes observers for a new executable mapping.
287- // Unlike interpreters where only one can handle an executable, multiple observers
288- // can be attached to the same executable.
289- //
290- // The caller is responsible to hold the ProcessManager lock to avoid race conditions.
291- func (pm * ProcessManager ) handleNewObservers (pr process.Process , m * Mapping ,
292- ei * eim.ExecutableInfo ) {
293- if len (ei .Observers ) == 0 {
294- return
295- }
296-
297- pid := pr .PID ()
298- key := m .GetOnDiskFileIdentifier ()
299-
300- // Initialize observer map for this PID if needed
301- if _ , ok := pm .observers [pid ]; ! ok {
302- pm .observers [pid ] = make (map [util.OnDiskFileIdentifier ][]interpreter.Observer )
303- }
304-
305- // Check if observers are already attached for this key
306- if _ , ok := pm.observers [pid ][key ]; ok {
307- // Already handled
308- return
309- }
310-
311- // Attach all observers
312- var observers []interpreter.Observer //nolint:prealloc
313- for _ , observerData := range ei .Observers {
314- observer , err := observerData .Attach (pm .ebpf , pid , libpf .Address (m .Bias ),
315- pr .GetRemoteMemory ())
316- if err != nil {
317- log .Errorf ("Failed to attach observer %v to PID %v: %v" , observerData , pid , err )
318- continue
319- }
320- if observer == nil {
321- continue
322- }
323-
324- log .Debugf ("Attached observer %v to PID %v" , observerData , pid )
325- observers = append (observers , observer )
326-
327- // Update TSD info if available
328- if tsdInfo := pm .getTSDInfo (pid ); tsdInfo != nil {
329- if err := observer .UpdateTSDInfo (pm .ebpf , pid , * tsdInfo ); err != nil {
330- log .Errorf ("Failed to update observer TSDInfo for PID %v: %v" , pid , err )
331- }
332- }
333- }
334-
335- if len (observers ) > 0 {
336- pm.observers [pid ][key ] = observers
337- }
338- }
339-
340286// handleNewMapping processes new file backed mappings
341287func (pm * ProcessManager ) handleNewMapping (pr process.Process , m * Mapping ,
342288 elfRef * pfelf.Reference ) error {
@@ -369,9 +315,6 @@ func (pm *ProcessManager) handleNewMapping(pr process.Process, m *Mapping,
369315 }
370316 }
371317
372- // Handle observers if present
373- pm .handleNewObservers (pr , m , & ei )
374-
375318 return nil
376319}
377320
@@ -533,26 +476,6 @@ func (pm *ProcessManager) processRemovedMappings(pid libpf.PID, mappings []libpf
533476 // remove the entry.
534477 delete (pm .interpreters , pid )
535478 }
536-
537- // Clean up observers that are no longer valid
538- for key , observerList := range pm .observers [pid ] {
539- if _ , ok := interpretersValid [key ]; ok {
540- continue
541- }
542- for _ , observer := range observerList {
543- if err := observer .Detach (pm .ebpf , pid ); err != nil {
544- log .Errorf ("Failed to unload observer for PID %d: %v" ,
545- pid , err )
546- }
547- }
548- delete (pm .observers [pid ], key )
549- }
550-
551- if len (pm .observers [pid ]) == 0 {
552- // There are no longer any mapped observers in the process, therefore we can
553- // remove the entry.
554- delete (pm .observers , pid )
555- }
556479}
557480
558481// synchronizeMappings synchronizes executable mappings for the given PID.
@@ -857,18 +780,6 @@ func (pm *ProcessManager) ProcessedUntil(traceCaptureKTime times.KTime) {
857780 }
858781 delete (pm .interpreters , pid )
859782
860- // Detach all observers for this PID
861- for _ , observerList := range pm .observers [pid ] {
862- for _ , observer := range observerList {
863- if err2 := observer .Detach (pm .ebpf , pid ); err2 != nil {
864- err = errors .Join (err ,
865- fmt .Errorf ("failed to handle observer process exit for PID %d: %v" ,
866- pid , err2 ))
867- }
868- }
869- }
870- delete (pm .observers , pid )
871-
872783 delete (pm .exitEvents , pid )
873784 log .Debugf ("PID %v exit latency %v ms" , pid , (nowKTime - pidExitKTime )/ 1e6 )
874785 }
0 commit comments