pthread_cancel と c++ exception

この間の sys-libs/glibc-2.3.6-r3 が契機だと思うんだけど、pthread_cancel で強制終了させたスレッドでは、例外が発生するようだ。
いきなり throw が発生しているように見えてびっくりな感じ。
さらに、スレッド関数(staticなメンバ関数)では c++ 例外を外に出さないように

catch (...)

としていたら、

FATAL: exception not rethrown

といわれて、abort する始末。やれやれ。スタックトレースはこんな感じ。

Program received signal SIGABRT, Aborted.
[Switching to Thread -1210803280 (zombie)]
0xffffe410 in __kernel_vsyscall ()
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7d73261 in raise () from /lib/libc.so.6
#2  0xb7d749f9 in abort () from /lib/libc.so.6
#3  0xb7f780cd in unwind_cleanup () from /lib/libpthread.so.0
#4  0xb7e6b91f in _Unwind_DeleteException () from /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/libgcc_s.so.1
#5  0xb7f36e81 in __cxa_end_catch () from /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/libstdc++.so.6
#6  0xb7f67fc3 in Thread::ThreadFunction (io_Param=0xbfaa02a0) at Thread.cpp:1240
#7  0xb7f73420 in start_thread () from /lib/libpthread.so.0
#8  0xb7e0439e in clone () from /lib/libc.so.6

とりあえず、catch (...) を抜くと、上記のメッセージは収まって、cleanup ハンドラも動いて、良い感じ。
libstd++ の中で始まった throw がどういう経路でおさまっているのかがよくわからないが、自分のケースでは cleanup ハンドラが効いているので大丈夫そう(かな?)。

カーネルはこんな感じで

Linux version 2.6.15-gentoo-r4 (root@allegro) (gcc version 3.4.5 (Gentoo 3.4.5, ssp-3.4.5-1.0, pie-8.7.9)) #2 Thu Feb 9 01:38:15 JST 2006

glibc は NTPL(only)で emerge している。gentoo 固有の問題ではないと思うんだけど。

誰か、詳細キボヌ...