俺と OS/2 と ruby-1.8.4:年末年始編

年末からちょろちょろ弄ってはいたのですが、make test-all でテストをかけると openssl のテストで固まってしまう。双方向パイプが必要みたいなのでそれっぽいのをでっちあげてぶち込んでみたけどやはりダメですよ。これだけのために一週間以上悩んでいたのは秘密だヨ(言っとるがな)

んで、今日になってようやく、

--- ruby-1.8.4-org/test/openssl/ssl_server.rb	2005-04-08 18:26:54.000000000 +0900
+++ ruby-1.8.4/test/openssl/ssl_server.rb	2006-01-12 22:36:36.000000000 +0900
@@ -67,8 +67,10 @@
   ssl = ssls.accept rescue next
   Thread.start{
     q = Queue.new
     th = Thread.start{ ssl.write(q.shift) while true }
+    Thread.pass
+    Thread.pass
     while line = ssl.gets
       if line =~ /^STARTTLS$/
         ssl.accept
         next

とかやってスレッドスケジューリングのフンづまりを手動でズポズポやればとりあえずいけることは分かった(Thread.pass はふたつ以上必要。ひとつだけだとダメでした)。
しかし他の環境でこういう症例は聞いたことがない…うーん、ネイティブスレッドのタイマを検討したほうがいいのだろうか。

それから全然 Ruby と関係ない話なんですけどね、OS/2 で「TCP/IP の設定」の GUI メニューを使って DHCP を有効にするとループバックが使えなくなっちゃうんですよ(ping 127.0.0.1 で何も返ってこない)。\MPTN\BIN\SETUP.CMD を手動で書き換えて ifconfig lo 127.0.0.1 を dhcpstrt の後に持ってく必要があったのでした。設定ツールが腐ってるってこういうことだったのですねえ。
これが原因で ruby のテストがあまりにも通らなくて3日ぐらい悩んでいたのは秘密だヨ(だから言っとるがな)orz