diff --git a/patch/patch.cfg b/patch/patch.cfg index 12045dd47..814d20e1f 100644 --- a/patch/patch.cfg +++ b/patch/patch.cfg @@ -373,4 +373,9 @@ patches = [ # https://bitbucket.org/chromiumembedded/cef/issues/2456 'name': 'content_runprocess_2456', }, + { + # Linux: Use poll instead of select to fix crash during startup. + # https://bitbucket.org/chromiumembedded/cef/issues/2466 + 'name': 'linux_poll_2466', + }, ] diff --git a/patch/patches/linux_poll_2466.patch b/patch/patches/linux_poll_2466.patch new file mode 100644 index 000000000..cdb43424b --- /dev/null +++ b/patch/patches/linux_poll_2466.patch @@ -0,0 +1,48 @@ +diff --git base/files/file_path_watcher_linux.cc base/files/file_path_watcher_linux.cc +index c58d6865c27b..6ab39432259d 100644 +--- base/files/file_path_watcher_linux.cc ++++ base/files/file_path_watcher_linux.cc +@@ -5,6 +5,7 @@ + #include "base/files/file_path_watcher.h" + + #include ++#include + #include + #include + #include +@@ -13,6 +14,7 @@ + #include + + #include ++#include + #include + #include + #include +@@ -221,20 +223,15 @@ LazyInstance::Leaky g_inotify_reader = LAZY_INSTANCE_INITIALIZER; + void InotifyReaderThreadDelegate::ThreadMain() { + PlatformThread::SetName("inotify_reader"); + +- // Make sure the file descriptors are good for use with select(). +- CHECK_LE(0, inotify_fd_); +- CHECK_GT(FD_SETSIZE, inotify_fd_); ++ std::array fdarray ++ { { ++ { inotify_fd_, POLLIN, 0 } ++ } }; + + while (true) { +- fd_set rfds; +- FD_ZERO(&rfds); +- FD_SET(inotify_fd_, &rfds); +- +- // Wait until some inotify events are available. +- int select_result = +- HANDLE_EINTR(select(inotify_fd_ + 1, &rfds, nullptr, nullptr, nullptr)); +- if (select_result < 0) { +- DPLOG(WARNING) << "select failed"; ++ int poll_result = HANDLE_EINTR(poll(fdarray.data(), fdarray.size(), -1)); ++ if (poll_result < 0) { ++ DPLOG(WARNING) << "poll failed"; + return; + } +