aboutsummaryrefslogtreecommitdiff
path: root/devel/electron13/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
diff options
context:
space:
mode:
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.cc40
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