[ruby-trunk - Bug #8790][Open] r41424 以降、Solaris と gdbm 1.1.10 にて TestGDBM#test_s_open_lock が終わらない

Issue #8790 has been reported by ngoto (Naohisa G.).


Bug #8790: r41424 以降、Solaris と gdbm 1.1.10 にて TestGDBM#test_s_open_lock
が終わらない

Author: ngoto (Naohisa G.)
Status: Open
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: ext
Target version:
ruby -v: ruby 2.1.0dev (2013-08-13) [sparc64-solaris2.10]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

r41424以降、Solarisにて make test-all すると、 TestGDBM#test_s_open_lock
がブロックして、いつまで待っても make test-all
が終わらなくなっています。この現象は、下記のように、Solaris以外でも、flockは無いがlockfは存在する環境では同様に発生すると思われます。

Solarisにて gdbm 1.1.10 を ./configure したときのログの一部を抜粋します。

checking for flock… no
checking for lockf… yes

このようにflockは無いがlockfはある場合、gdbm 1.1.10 のソース(
ftp://ftp.gnu.org/gnu/gdbm/gdbm-1.10.tar.gz )の gdbm-1.10/src/lock.c
の124行目のコードがファイルのロックに使用されるようです。その周辺のコードを引用します。

#if HAVE_LOCKF
/* Mask doesn’t matter for lockf. */
lock_val = lockf (dbf->desc, F_LOCK, (off_t)0L);

このように、lockfでロックを取得する際に F_LOCK
つまり前のロックが解除されるまでブロックして待ち続けるオプションを付けています。このため、現在の
TestGDBM#test_s_open_lock の実装では、ブロックし続けて永遠に終わりません。

Issue #8790 has been updated by nobu (Nobuyoshi N.).

Status changed from Closed to Open
% Done changed from 100 to 0

今のSolarisで開発環境を作るのってどうすればいいんでしょうか。

Bug #8790: r41424 以降、Solaris と gdbm 1.1.10 にて TestGDBM#test_s_open_lock
が終わらない

Author: ngoto (Naohisa G.)
Status: Open
Priority: Normal
Assignee: nobu (Nobuyoshi N.)
Category: ext
Target version:
ruby -v: ruby 2.1.0dev (2013-08-13) [sparc64-solaris2.10]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

r41424以降、Solarisにて make test-all すると、 TestGDBM#test_s_open_lock
がブロックして、いつまで待っても make test-all
が終わらなくなっています。この現象は、下記のように、Solaris以外でも、flockは無いがlockfは存在する環境では同様に発生すると思われます。

Solarisにて gdbm 1.1.10 を ./configure したときのログの一部を抜粋します。

checking for flock… no
checking for lockf… yes

このようにflockは無いがlockfはある場合、gdbm 1.1.10 のソース(
ftp://ftp.gnu.org/gnu/gdbm/gdbm-1.10.tar.gz )の gdbm-1.10/src/lock.c
の124行目のコードがファイルのロックに使用されるようです。その周辺のコードを引用します。

#if HAVE_LOCKF
/* Mask doesn’t matter for lockf. */
lock_val = lockf (dbf->desc, F_LOCK, (off_t)0L);

このように、lockfでロックを取得する際に F_LOCK
つまり前のロックが解除されるまでブロックして待ち続けるオプションを付けています。このため、現在の
TestGDBM#test_s_open_lock の実装では、ブロックし続けて永遠に終わりません。

Issue #8790 has been updated by Hiroshi SHIBATA.

Status changed from Open to Feedback


Bug #8790: r41424 以降、Solaris と gdbm 1.1.10 にて TestGDBM#test_s_open_lock
が終わらない

  • Author: Naohisa G.
  • Status: Feedback
  • Priority: Normal
  • Assignee: Nobuyoshi N.
  • Category: ext
  • Target version:
  • ruby -v: ruby 2.1.0dev (2013-08-13) [sparc64-solaris2.10]
  • Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN

r41424以降、Solarisにて make test-all すると、 TestGDBM#test_s_open_lock
がブロックして、いつまで待っても make test-all
が終わらなくなっています。この現象は、下記のように、Solaris以外でも、flockは無いがlockfは存在する環境では同様に発生すると思われます。

Solarisにて gdbm 1.1.10 を ./configure したときのログの一部を抜粋します。

checking for flock… no
checking for lockf… yes

このようにflockは無いがlockfはある場合、gdbm 1.1.10 のソース(
ftp://ftp.gnu.org/gnu/gdbm/gdbm-1.10.tar.gz )の gdbm-1.10/src/lock.c
の124行目のコードがファイルのロックに使用されるようです。その周辺のコードを引用します。

#if HAVE_LOCKF
/* Mask doesn’t matter for lockf. */
lock_val = lockf (dbf->desc, F_LOCK, (off_t)0L);

このように、lockfでロックを取得する際に F_LOCK
つまり前のロックが解除されるまでブロックして待ち続けるオプションを付けています。このため、現在の
TestGDBM#test_s_open_lock の実装では、ブロックし続けて永遠に終わりません。