One last patch before I head to Lenexa, this fixes the long standing
not-a-bug that our default launch policy is launch::deferred.

This way std::async with no explicit policy or with any policy that
contains launch::async will run in a new thread.

Apparently libc++ does the same and they aren't getting lots of
complaints about fork-bombs, so let's try the same thing. If people
don't like it we have plenty of time in stage 1 to reconsider.

Tested x86_64-linux and powerpc64le-linux, I'm going to commit this to
trunk unless someone strongly objects.


commit cb6dfe604295873cebd5b3a53b10b1e882eb3cff
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Sat May 2 19:27:10 2015 +0100

    	PR libstdc++/51617
    	* include/std/future (async): Change default policy to launch::async.

diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index fc3f816..a67db98 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -1704,7 +1704,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     {
       typedef typename result_of<_Fn(_Args...)>::type result_type;
       std::shared_ptr<__future_base::_State_base> __state;
-      if ((__policy & (launch::async|launch::deferred)) == launch::async)
+      if ((__policy & launch::async) == launch::async)
 	{
 	  __state = __future_base::_S_make_async_state(std::__bind_simple(
               std::forward<_Fn>(__fn), std::forward<_Args>(__args)...));

Reply via email to