diff options
Diffstat (limited to 'devel/electron13/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc')
-rw-r--r-- | devel/electron13/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/devel/electron13/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc b/devel/electron13/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc new file mode 100644 index 000000000000..3de63c214457 --- /dev/null +++ b/devel/electron13/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc @@ -0,0 +1,40 @@ +--- third_party/crashpad/crashpad/util/posix/close_multiple.cc.orig 2021-01-07 00:37:22 UTC ++++ third_party/crashpad/crashpad/util/posix/close_multiple.cc +@@ -181,11 +181,37 @@ void CloseMultipleNowOrOnExec(int fd, int preserve_fd) + } + #endif + ++#if defined(OS_BSD) ++ // If preserve_fd is in the space to be freed, copy it down. ++ bool copied = false; ++ if (preserve_fd >= fd) { ++ if (preserve_fd > fd) { ++ int rv = dup2(preserve_fd, fd); ++ if (rv != 0) ++ PLOG(WARNING) << "dup2"; ++ copied = true; ++ } ++ fd++; ++ } ++ // Cloexec is only used for MACOS... ++ closefrom(fd); ++ // Put it back. ++ if (copied) { ++ fd--; ++ int rv = dup2(fd, preserve_fd); ++ if (rv != 0) ++ PLOG(WARNING) << "dup2"; ++ rv = IGNORE_EINTR(close(fd)); ++ if (rv != 0) ++ PLOG(WARNING) << "close"; ++ } ++#else + for (int entry_fd = fd; entry_fd < max_fd; ++entry_fd) { + if (entry_fd != preserve_fd) { + CloseNowOrOnExec(entry_fd, true); + } + } ++#endif + } + + } // namespace crashpad |