[#47562] [Backport 200 - Backport #8716][Open] segmation fault 正規表現で大量のグループを利用時 — "taka-yoshi (taka-yoshi taka)" <smokeonthewater222@...>

15 messages 2013/08/01

[#47569] [ruby-trunk - Feature #8726][Open] Class#source_location — "takiuchi (Genki Takiuchi)" <genki@...21g.com>

14 messages 2013/08/03

[#47663] Re: [ruby-core:56878] [ruby-trunk - misc #8835][Open] Introducing a semantic versioning scheme and branching policy — "Akinori MUSHA" <knu@...>

At Fri, 30 Aug 2013 21:49:34 +0900,

6 messages 2013/08/30

[ruby-dev:47652] [ruby-trunk - Bug #8810][Open] SolarisでGDBM.open内で処理がブロックしたらTimeout.timeout が効かない

From: "ngoto (Naohisa Goto)" <ngotogenome@...>
Date: 2013-08-22 15:27:55 UTC
List: ruby-dev #47652
Issue #8810 has been reported by ngoto (Naohisa Goto).

----------------------------------------
Bug #8810: SolarisでGDBM.open内で処理がブロックしたらTimeout.timeout が効かない
https://bugs.ruby-lang.org/issues/8810

Author: ngoto (Naohisa Goto)
Status: Open
Priority: Normal
Assignee: 
Category: ext
Target version: 
ruby -v: -
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


GDBM.open内で処理がブロックした場合にTimeout.timeoutが効きません。

再現方法は、Solarisにて、以下のようにGDBMをオープンしたままにして、

 $ ruby -r gdbm -e 'db = GDBM.open("/var/tmp/tmpdb"); gets'

同一マシンで別のシェルで

 $ ruby -r gdbm -r timeout -e 'Timeout.timeout(5) { db = GDBM.open("/var/tmp/tmpdb") }'

を実行しても、タイムアウトすることなく後者のGDBM.openがブロックし続けて終わりません。

Solarisだけでなく、Linux上にて、以下のように無理やりflockを使わないようconfigureしてmakeしたlibgdbm.soを使用した場合でも同様に再現しました。

 $ wget ftp://ftp.gnu.org/gnu/gdbm/gdbm-1.10.tar.gz
 $ tar xvf gdbm-1.10.tar.gz
 $ cd gdbm-1.10
 $ ./configure --prefix=/home/xxxxx/gdbm ac_cv_func_flock=no
 $ make
 $ make install
 $ LD_PRELOAD=/home/xxxxx/gdbm/lib/libgdbm.so ruby -r gdbm -e 'db = GDBM.open("/var/tmp/tmpdb"); gets'
(別のシェルにて)
 $ LD_PRELOAD=/home/xxxxx/gdbm/lib/libgdbm.so ruby -r gdbm -r timeout -e 'Timeout.timeout(5) { db = GDBM.open("/var/tmp/tmpdb") }'


-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next