diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-21 12:45:10 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-21 12:45:10 +0200 |
| commit | 6c4f68164df93ed70123db61fb32a9688f5b0623 (patch) | |
| tree | b356faff9744edd63a78ff60cc62db924c2ad1c3 | |
| parent | 480162734c196b4b966a7f5a1c5df3749cd129c6 (diff) | |
Handle open_by_handle_at without pathname
Amp-Thread-ID: https://ampcode.com/threads/T-019c7faf-baaa-704f-af15-8aeba9df4628
Co-authored-by: Amp <amp@ampcode.com>
| -rw-r--r-- | internal/eventloop.go | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go index 3dd25ac..cf128d2 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -306,13 +306,6 @@ func (e *eventLoop) tracepointExited(exitEv event.Event, ch chan<- *event.Pair) case *OpenByHandleAtEvent: tid := ep.EnterEv.GetTid() - pathname, ok := e.pendingHandles[tid] - if !ok { - ep.Recycle() - return - } - delete(e.pendingHandles, tid) - retEvent, ok := ep.ExitEv.(*RetEvent) if !ok { panic("expected *types.RetEvent for open_by_handle_at exit") @@ -320,10 +313,19 @@ func (e *eventLoop) tracepointExited(exitEv event.Event, ch chan<- *event.Pair) if fd := int32(retEvent.Ret); fd >= 0 { openByHandleEv := ep.EnterEv.(*OpenByHandleAtEvent) - - file := file.NewFd(fd, pathname, openByHandleEv.Flags) - e.files[fd] = file - ep.File = file + if pathname, ok := e.pendingHandles[tid]; ok { + delete(e.pendingHandles, tid) + file := file.NewFd(fd, pathname, openByHandleEv.Flags) + e.files[fd] = file + ep.File = file + } else { + fdFile := file.NewFdWithPid(fd, v.Pid) + if fdFile.Flags() == file.Flags(-1) { + fdFile.SetFlags(openByHandleEv.Flags) + } + e.files[fd] = fdFile + ep.File = fdFile + } ep.Comm = e.comm(tid) } else { ep.Recycle() |
