This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Update catch(...) handlers to deal with __forced_unwind


On 06/06/14 12:40 +0200, Uros Bizjak wrote:
On Fri, Jun 6, 2014 at 11:19 AM, Jonathan Wakely <jwakely@redhat.com> wrote:
On 06/06/14 10:27 +0200, Uros Bizjak wrote:

These two tests timeout on alpha-linux-gnu:

FAIL: 30_threads/async/forced_unwind.cc execution test
WARNING: program timed out.
FAIL: 30_threads/packaged_task/forced_unwind.cc execution test
WARNING: program timed out.


Sorry about that, I don't know why.

Does pthread_exit(0) use a __forced_unwind exception on
alpha-linux-gnu? This should tell you ...


#include <bits/cxxabi_forced.h>
#include <pthread.h>

void* f(void*) {
 try
 {
   pthread_exit(0);
 }
 catch (__cxxabiv1::__forced_unwind const&)
 {
   __builtin_puts("unwind");
   throw;
 }
 catch (...)
 {
   __builtin_puts("something else");
   throw;
 }
}

int main()
{
 pthread_t t;
 pthread_create(&t, 0, f, 0);
 pthread_join(t, 0);

}

Strange, I don't get anything ...

$ g++ -lpthread pt.C
$ ./a.out

That explains it then: the thread just goes away, and the waiting
function hangs forever expecting the future to be made ready.

The test assumes pthread_exit is implemented by throwing
__forced_unwind, which apparently isn't true for all glibc targets.

If the thread just goes away there's no way to make the future ready.
I guess we should just XFAIL it for alpha, and maybe other targets.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]