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

Jonathan Wakely jwakely@redhat.com
Fri Jun 6 09:20:00 GMT 2014


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);
}


>[pid 18326] futex(0x2000027a1f4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
>[pid 18326] futex(0x12001a08c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
>[pid 18326] madvise(0x20000454000, 8355840, MADV_DONTNEED) = 0
>[pid 18326] exit(0)                     = ?
>[pid 18326] +++ exited with 0 +++
><... futex resumed> )                   = 0
>futex(0x12001a098, FUTEX_WAKE_PRIVATE, 2147483647) = 0
>futex(0x12001a05c, FUTEX_WAIT_PRIVATE, 1, NULL
>
>... the test hangs here ...

Could I get a stack trace of the remaining thread at that point?




More information about the Libstdc++ mailing list