mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 12:24:38 +08:00
Ignore system_error in thread startup
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-20 Tom Tromey <tromey@adacore.com> * thread-pool.cc (thread_pool::set_thread_count): Ignore system errors.
This commit is contained in:
parent
9d37f01307
commit
14f62a099a
@ -1,3 +1,8 @@
|
||||
2020-11-20 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* thread-pool.cc (thread_pool::set_thread_count): Ignore system
|
||||
errors.
|
||||
|
||||
2020-11-10 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
PR build/26848:
|
||||
|
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user