昨日twitterで騒いでいた件まとめ。問題解決に7時間つぶれた…。 Leopardで有効化されたucontextですが、sizeof(ucontext_t)がAPIとApple側実装とで異なっている為にgetcontext()やswapcontext()を使うとメモリ破壊を引き起こします。 詳細は/usr/include/sys/_structs.hの128行あたりを見てください。ここで_XOPEN_SOURCEが有効/無効でsizeof(ucontext_t)が変わりますが、実装は有効、API利用時は無効で定義されるらしく、ポインタで結果を受け取るようなgetcontext/swapcontextのようなAPIを呼び出すと__mcontext_data分だけ多く書き込まれてしまいます。 回避するにはこの_STRUCT_MCONTEXT __mcontext_data分だけ多めにcont