[Lldb-commits] [lldb] [lldb] Inherit DuplicateFileAction(HANDLE, HANDLE) handles on windows (PR #137978)

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Mon May 5 02:02:17 PDT 2025


================
@@ -122,8 +123,14 @@ struct ForkLaunchInfo {
         ExitWithError(error_fd, "close");
       break;
     case FileAction::eFileActionDuplicate:
-      if (dup2(action.fd, action.arg) == -1)
-        ExitWithError(error_fd, "dup2");
+      if (action.fd != action.arg) {
----------------
labath wrote:

Can you explain your reasoning?

This is something I have considered, and I came to the opposite conclusion. The reason is that I think this fits nicely into the `DuplicateFileAction(from, to)` interface. You're saying "I want to take fd `from` from my process and pass it as fd `to` to the child process". That statement makes sense regardless of whether `from` and `to` have the same value or not. The fact that one needs to use a different sequence of calls to achieve this effect is (can be) an implementation detail.

Imagine I have some file descriptor open, and for whatever reason, I want to pass it to the child process exactly as fd 47. That's something I can freely do, as I control all of the FDs of the child process, but if this were to be controlled by a separate flag, I would have to write special code to handle the case where the my own copy of that FD happens to be 47:
```
if (fd_I_want_to_pass != 47)
  info.AppendDuplicateFileAction(47, fd_I_want_to_pass);
else
  info.InheritFileAction(47);
```

>From a windows point of view, I agree that a separate action makes sense, but if we can agree that the above makes sense for posix, then I think it also makes sense to reuse the same thing here (we're sort of doing the same thing, except that we only support the case where the two numbers are the same).

That said, since the `from==to` is going to be the only case that is going to work in cross-platform code, I can imagine having some wrapper/helper function, which lets you avoid specifying the same FD twice, but then calls `DuplicateFileAction(fd, fd)` under the hood. Would that address your concerns?

https://github.com/llvm/llvm-project/pull/137978


More information about the lldb-commits mailing list