Project

General

Profile

Actions

Bug #8810

closed

GDBM.open内で処理がブロックしたらTimeout.timeout が効かない

Added by ngoto (Naohisa Goto) over 10 years ago. Updated over 2 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
-
Backport:
[ruby-dev:47652]

Description

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") }'


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #8790: r41424 以降、Solaris と gdbm 1.1.10 にて TestGDBM#test_s_open_lock が終わらないClosednobu (Nobuyoshi Nakada)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0