[Momonga-devel.ja:01204] OmoiKondara でビルドするとdefunctになるパッケージがありました
- From: zunda <zunda@xxxxxxx>
- Date: Thu, 9 Jan 2003 02:54:55 +0900
ずんだあん です
年末年始の休み中に、パッケージの全リビルドを試みてみたのですが、
OmoiKondara (v. 1.93) を使って
../tools/OmoiKondara -f gcc2.96
あるいは
../tools/OmoiKondara -f -v gcc2.96
として gcc2.96 をビルドすると、rpmbuildがdefunct になるようです。具体的
には、rpmbuildが終了した後も、220行目の
s = pipe[0].gets
がブロックされてしまっていることが、^Cを押した時のトレースバックからわか
ります。(どうして以前はうまくいったのだろう?)
対症療法として、いまのところ、OmoiKondara を以下のように変更して、ある時
間、子プロセスから文字が流れてこなかったらそのプロセスが生きているか確認
するようにしてみました。
今のところこれでgcc2.96も無事にできあがるようになったのですが、本質的な
解決方法ではないような気も…。
以上、ご報告まで。
Index: OmoiKondara
===================================================================
RCS file: /home/cvs/tools/OmoiKondara,v
retrieving revision 1.93
diff -u -r1.93 OmoiKondara
--- OmoiKondara 2002/12/26 02:56:28 1.93
+++ OmoiKondara 2003/01/08 17:36:06
@@ -1,6 +1,7 @@
#!/usr/bin/env ruby
require 'getoptlong'
+require 'timeout'
begin
require 'rpmmodule'
$CANNOTSTRICT = false
@@ -190,6 +191,20 @@
end
=begin
+--- IO::gets_with_timeout (sec)
+getsするが、sec秒以内に終了しない場合にはTimeoutErrorをraiseする。
+=end
+ class IO
+ def gets_with_timeout (sec)
+ r = ''
+ timeout (sec) do
+ r = gets
+ end
+ r
+ end
+ end
+
+=begin
--- exec_command(command)
引数で指定されたコマンドを実行し、出力をログに記録する。
=end
@@ -217,12 +232,16 @@
end
pipe[1].close
- while s = pipe[0].gets do
- print s if $VERBOSEOUT
- fLOG.print s
+ begin
+ while s = pipe[0].gets_with_timeout (60) do
+ print s if $VERBOSEOUT
+ fLOG.print s
+ end
+ Process.waitpid(pid)
+ rescue TimeoutError
+ retry until Process.waitpid(pid, Process::WNOHANG)
end
ensure
- Process.waitpid2(pid)
status = $?
pipe[0].close
end