[PATCH] Ignore system_error in thread startup
Tom Tromey
tromey@adacore.com
Wed Nov 11 20:19:52 GMT 2020
libstdc++ might change so that it always implements std::thread, but
then have thread startup simply fail. This is being discussed here:
https://gcc.gnu.org/pipermail/gcc-patches/2020-November/558736.html
This patch pre-emptively changes gdb to handle this scenario. It
seemed fine to me to ignore all system errors at thread startup, so
that is what this does.
gdbsupport/ChangeLog
2020-11-11 Tom Tromey <tromey@adacore.com>
* thread-pool.cc (thread_pool::set_thread_count): Ignore system
errors.
---
gdbsupport/ChangeLog | 5 +++++
gdbsupport/thread-pool.cc | 16 ++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/gdbsupport/thread-pool.cc b/gdbsupport/thread-pool.cc
index be9ca22682a..06586f7da03 100644
--- a/gdbsupport/thread-pool.cc
+++ b/gdbsupport/thread-pool.cc
@@ -25,6 +25,7 @@
#include "gdbsupport/alt-stack.h"
#include "gdbsupport/block-signals.h"
#include <algorithm>
+#include <system_error>
/* On the off chance that we have the pthread library on a Windows
host, but std::thread is not using it, avoid calling
@@ -102,8 +103,19 @@ thread_pool::set_thread_count (size_t num_threads)
block_signals blocker;
for (size_t i = m_thread_count; i < num_threads; ++i)
{
- std::thread thread (&thread_pool::thread_function, this);
- thread.detach ();
+ try
+ {
+ std::thread thread (&thread_pool::thread_function, this);
+ thread.detach ();
+ }
+ catch (const std::system_error &)
+ {
+ /* libstdc++ may not implement std::thread, and will
+ throw an exception on use. It seems fine to ignore
+ this, and any other sort of startup failure here. */
+ num_threads = i;
+ break;
+ }
}
}
/* If the new size is smaller, terminate some existing threads. */
--
2.26.2
More information about the Gdb-patches
mailing list