@@ -520,15 +520,13 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
520520 proc , parent := process .GetParentProcessInternal (msg .ProcessKey .Pid , timestamp )
521521 var err error
522522
523- if option .Config .EnableProcessAncestors && proc .NeededAncestors () && ! msg . RefCntDone [ AncestorsRefCnt ] {
523+ if option .Config .EnableProcessAncestors && proc .NeededAncestors () {
524524 if ancestors , perr := process .GetAncestorProcessesInternal (proc .UnsafeGetProcess ().ParentExecId ); perr == nil {
525525 var tetragonAncestors []* tetragon.Process
526526 for _ , ancestor := range ancestors {
527527 tetragonAncestors = append (tetragonAncestors , ancestor .UnsafeGetProcess ())
528- ancestor .RefDec ("ancestor" )
529528 }
530529 ev .SetAncestors (tetragonAncestors )
531- msg .RefCntDone [AncestorsRefCnt ] = true
532530 } else {
533531 eventcache .CacheRetries (eventcache .AncestorsInfo ).Inc ()
534532 err = eventcache .ErrFailedToGetAncestorsInfo
@@ -537,10 +535,6 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
537535
538536 if parent != nil {
539537 ev .SetParent (parent .UnsafeGetProcess ())
540- if ! msg .RefCntDone [ParentRefCnt ] {
541- parent .RefDec ("parent" )
542- msg .RefCntDone [ParentRefCnt ] = true
543- }
544538 } else {
545539 eventcache .CacheRetries (eventcache .ParentInfo ).Inc ()
546540 err = eventcache .ErrFailedToGetParentInfo
@@ -549,10 +543,6 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
549543 if proc != nil {
550544 // Use cached version of the process
551545 ev .SetProcess (proc .UnsafeGetProcess ())
552- if ! msg .RefCntDone [ProcessRefCnt ] {
553- proc .RefDec ("process" )
554- msg .RefCntDone [ProcessRefCnt ] = true
555- }
556546 } else {
557547 eventcache .CacheRetries (eventcache .ProcessInfo ).Inc ()
558548 err = eventcache .ErrFailedToGetProcessInfo
@@ -565,7 +555,34 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
565555}
566556
567557func (msg * MsgExitEventUnix ) Retry (internal * process.ProcessInternal , ev notify.Event ) error {
568- return eventcache .HandleGenericEvent (internal , ev , nil )
558+ if err := eventcache .HandleGenericEvent (internal , ev , nil ); err != nil {
559+ return err
560+ }
561+
562+ tetragonProcess := ev .GetProcess ()
563+
564+ if option .Config .EnableProcessAncestors && ! msg .RefCntDone [AncestorsRefCnt ] {
565+ if ancestors , err := process .GetAncestorProcessesInternal (tetragonProcess .ParentExecId ); err == nil {
566+ for _ , ancestor := range ancestors {
567+ ancestor .RefDec ("ancestor" )
568+ }
569+ msg .RefCntDone [AncestorsRefCnt ] = true
570+ }
571+ }
572+
573+ if tetragonProcess .Pid .Value > 1 && ! msg .RefCntDone [ParentRefCnt ] {
574+ if parent , _ := process .Get (tetragonProcess .ParentExecId ); parent != nil {
575+ parent .RefDec ("parent" )
576+ msg .RefCntDone [ParentRefCnt ] = true
577+ }
578+ }
579+
580+ if ! msg .RefCntDone [ProcessRefCnt ] {
581+ internal .RefDec ("process" )
582+ msg .RefCntDone [ProcessRefCnt ] = true
583+ }
584+
585+ return nil
569586}
570587
571588func (msg * MsgExitEventUnix ) HandleMessage () * tetragon.GetEventsResponse {
0 commit comments