«前の日記(2003年12月11日) 最新 次の日記(2003年12月13日)» 編集

Matzにっき


2003年12月12日 [長年日記]

_ [Ruby]面倒なバグ

test/unitの作者、Nathaniel Talbottが悩んでいる。[ruby-talk:87519][ruby-core:01943]

libpthreadをリンクしたライブラリを実行するとRubyがブロックしてしまうらしい。 手元でテストすると--enable-pthreadしたライブラリではごくまれに発生する。

デバッガで追いかけると __pthread_wait_for_restart_signal()の中で、 sigsuspendをするところで止まっているようだ。

現象を推測するとpthread用の割り込み(SIGUSR1または__pthread_sig_restart)と Rubyスレッドの割り込み(SIGVTALRM)のハンドラが呼ばれるタイミングによって、 sigsuspendが効かなくなる(あるいはsigprocmaskが壊れる)ようなんだけど。

__pthread_wait_for_restart_signal()でgoogleすると、 「ハングします」というレポートがいくつか見つかるので、よくある問題らしいのだが、 こまったことに、どのレポートにも有効な答えが付いていないようだ。

困った。

_ [会社]忘年会

今日は玉造温泉で会社の忘年会です。 東京事務所も含めて全社が一堂に会するのは年に一度しかありませんから、 貴重な機会です。

上のバグが気になるので、宴会中にデバッグということにならないといいなと思っているのですが (思っているならしなきゃいいのに)。

では、行ってきます。

_ [会社]忘年会(その2)

というわけで、忘年会です。温泉に入って、おいしいものを食べて、滅多に会わない人とも話をして。

今年は体調不良で欠席の一人を除いて全社員が出席でした。 この人は去年も体調が悪くて忘年会に出れなかったんだよなあ。鬼門か。 去年は他にも仕事の〆切に追われて出席できなかった人もいましたが、 今年はずいぶん平穏だったようです。

さんざん食べた人や、さんざん飲んだ人や、アルコールは一滴も飲まずに車で帰った人や、 飲み過ぎてコアダンプした人や、旅館のエレベータの前で寝入ってしまった人や、 いろんな意味で暴れた人や、PS2を持ち込んで「くまうた」をプレイした人や、 やっぱりデバッグした人などがいました。

えー、しらふの目から見ると、社会人としてこれはどうかという行為も散見されましたが、 酒の席ということで口外しないことにします。でも、来年も同じことしないでくださいね(苦笑)。

私は近い(徒歩5分)ので深夜2時頃に自宅に帰りましたが、ほとんどの人はそのまま会場の旅館に泊まりました。 東京組(の一部)は明日は大山でスキーだそうです。気温が下がったので今日あたり雪が降ってるかもしれません。

_ [ゲーム]『くまうた』

くまうた(-) で、『くまうた』です。 どうもレアモノで入手困難という噂も聞きます。

私の周りでは評価が真っ二つに分かれました。「これは面白いっ」という反応と、 「ぜんぜん盛り上がらない、低調」という反応です。

私にはゲームに関する経験がないので、これがゲームとして良いのか悪いのか、 売れ線なのかどうなのか判断することはできないのですが、 個人的に「プログラムを育てる」モノが好きなので、結構面白く思いました。

ただ、くまの演歌のランキングが高かったり低かったりするのですが、 評価基準が全く予想できないので、ややモチベーションが下がりました。

最後には「くまうたTV」で自動生成した演歌を聞き続けて環境ビデオとして楽しみました。 というか、結局はこの「自動生成した曲を聞き続ける」というのがこのゲームの一番の機能ではないかと。

前田くんは「予定調和な音楽なら同じことができそう、演歌だけでなく、クラシックとかヘビメタとか」と 語ってました。江渡さん、「くまうたヘビメタ版」とかどうでしょう?

_ [Ruby]pthreadバグ

で、温泉に入って同僚とpthreadについて語り合っている時にひらめきましたよ。

これはたぶんLinuxThreadのバグで、 pthreadのコンテキスト操作とSIGVTALRMの割り込みのタイミングの関係でブロックしてしまうのだろう、 ということは、pthread対応時には割り込みを止めてタイマー処理用のスレッドを起動してはどうだろうかと。

で、いろいろいじって完成したのですが*1、 ブロックする頻度はずいぶん下がったようです。でも、まだたまに止まるなあ。

*1  また宴会中にデバッグしてしまった


«前の日記(2003年12月11日) 最新 次の日記(2003年12月13日)» 編集