[#45341] 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...>

 ささだです.

28 messages 2012/03/11
[#45816] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

 ささだです.

[#45817] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月25日 18:26 SASADA Koichi <ko1@atdot.net>:

[#45819] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

 ささだです.

[#45820] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月25日 19:39 SASADA Koichi <ko1@atdot.net>:

[#45827] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

(2012/06/25 20:32), Tanaka Akira wrote:

[#45841] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月26日 3:40 SASADA Koichi <ko1@atdot.net>:

[#45372] Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

14 messages 2012/03/16
[#45376] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — Yukihiro Matsumoto <matz@...> 2012/03/17

まつもと ゆきひろです

[#45377] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (石塚圭樹) 2012/03/17

けいじゅ@いしつかです.

[#45381] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — Yukihiro Matsumoto <matz@...> 2012/03/17

まつもと ゆきひろです

[#45399] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (石塚圭樹) 2012/03/18

けいじゅ@いしつかです.

[#45412] [ruby-trunk - Feature #6177][Open] array.cのrb_ary_equal()の高速化 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

13 messages 2012/03/20

[#45471] [ruby-trunk - Bug #6230][Open] [WEBrick] WEBrick::HTTPResponse#body の IO オブジェクトの読み込みに read メソッドを使っているため必要以上にブロックされる — "nobuoka (yu nobuoka)" <nobuoka@...>

7 messages 2012/03/30

[ruby-dev:45338] [ruby-trunk - Bug #6046][Third Party's Issue] Berkeley DB dbm_open in libc is called even if --with-dbm-type=gdbm_compat is specified on FreeBSD

From: Koichi Sasada <redmine@...>
Date: 2012-03-11 08:35:57 UTC
List: ruby-dev #45338
Issue #6046 has been updated by Koichi Sasada.

Status changed from Open to Third Party's Issue
Assignee set to Akira Tanaka

田中さんが 3rd party issue で良いといったので,
このチケットは 3rd party issue.
----------------------------------------
Bug #6046: Berkeley DB dbm_open in libc is called even if --with-dbm-type=gdbm_compat is specified on FreeBSD
https://bugs.ruby-lang.org/issues/6046

Author: Akira Tanaka
Status: Third Party's Issue
Priority: Normal
Assignee: Akira Tanaka
Category: 
Target version: 
ruby -v: ruby 2.0.0dev (2012-02-19 trunk 34688) [x86_64-freebsd8.2]


FreeBSD 8.2 で、--with-dbm-type=gdbm_compat として ext/dbm に GDBM を
使わせようとしたときに、(libc 中の) Berkeley DB の dbm_open を呼んで
しまうようです。

再現手順は以下のとおりです。

  % uname -a
  FreeBSD freebsd82-64 8.2-RELEASE-p3 FreeBSD 8.2-RELEASE-p3 #0: Tue Sep 27 18:45:57 UTC 2011     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
  % mkdir g
  % cd g
  % prefix=`pwd`
  % echo $prefix
  /home/akr/g
  % fetch ftp://ftp.jaist.ac.jp/pub/GNU/gdbm/gdbm-1.10.tar.gz
  % tar xf gdbm-1.10.tar.gz 
  % ./configure --prefix=$prefix --enable-libgdbm-compat
  % make
  % make install
  % cd ..
  % export LD_RUN_PATH=$prefix/lib        
  % svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby
  % cd ruby 
  % autoconf
  % ./configure --prefix=$prefix --with-opt-dir=$prefix --with-dbm-type=gdbm_compat
  % make
  % make install
  % ./ruby -v
  ruby 2.0.0dev (2012-02-19 trunk 34688) [x86_64-freebsd8.2]
  % ./ruby -rdbm -e 'DBM.open("a")'
  -e:1: [BUG] Segmentation fault
  ruby 2.0.0dev (2012-02-19 trunk 34688) [x86_64-freebsd8.2]

  -- Control frame information -----------------------------------------------
  c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC  :open
  c:0003 p:0017 s:0006 b:0006 l:001d88 d:001f08 EVAL   -e:1
  c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
  c:0001 p:0000 s:0002 b:0002 l:001d88 d:001d88 TOP   

  -- Ruby level backtrace information ----------------------------------------
  -e:1:in `<main>'
  -e:1:in `open'

  -- Other runtime information -----------------------------------------------

  * Loaded script: -e

  * Loaded features:

      0 enumerator.so
      1 /home/akr/g/lib/ruby/2.0.0/x86_64-freebsd8.2/enc/encdb.so
      2 /home/akr/g/lib/ruby/2.0.0/x86_64-freebsd8.2/enc/trans/transdb.so
      3 /home/akr/g/lib/ruby/2.0.0/rubygems/defaults.rb
      4 /home/akr/g/lib/ruby/2.0.0/x86_64-freebsd8.2/rbconfig.rb
      5 /home/akr/g/lib/ruby/2.0.0/rubygems/deprecate.rb
      6 /home/akr/g/lib/ruby/2.0.0/rubygems/exceptions.rb
      7 /home/akr/g/lib/ruby/2.0.0/rubygems/custom_require.rb
      8 /home/akr/g/lib/ruby/2.0.0/rubygems.rb
      9 /home/akr/g/lib/ruby/2.0.0/x86_64-freebsd8.2/dbm.so

  [NOTE]
  You may have encountered a bug in the Ruby interpreter or extension libraries.
  Bug reports are welcome.
  For details: http://www.ruby-lang.org/bugreport.html

  zsh: abort (core dumped)  ./ruby -rdbm -e 'DBM.open("a")'

  % ls -l a.*
  -rw-r--r--  1 akr  akr  0 Feb 19 12:07 a.db
  % file a.db
  a.db: empty

まず、BUS Error が起きていますが、これは、libc の dbm_open を呼んでしまうのに、
dbm_pagfno は GDBM のものを呼んでしまうためです。
(dbm_pagfno は libc には入っていないので、選択の余地なく GDBM のが呼ばれます)

本質的な問題は、生成された a.db というファイル名からわかるように、
dbm_open は libc に入っている、Berkeley DB のものが呼ばれていることです。
(ファイルが空なのは dbm_close せずに BUS Error で終わっているからでしょう)

ldd で調べると、dbm.so にはちゃんと GDBM がリンクされています。

  % ldd .ext/x86_64-freebsd8.2/dbm.so 
  .ext/x86_64-freebsd8.2/dbm.so:
          libgdbm_compat.so.4 => /home/akr/g/lib/libgdbm_compat.so.4 (0x800c00000)
          libgdbm.so.4 => /home/akr/g/lib/libgdbm.so.4 (0x800d03000)
          libthr.so.3 => /lib/libthr.so.3 (0x800e0b000)
          librt.so.1 => /usr/lib/librt.so.1 (0x800f24000)
          libcrypt.so.5 => /lib/libcrypt.so.5 (0x801029000)
          libm.so.5 => /lib/libm.so.5 (0x801142000)
          libc.so.7 => /lib/libc.so.7 (0x800647000)

また、LD_PRELOAD で libgdbm_compat.so.4 を最初に読み込ませてやれば、
意図どおりに GDBM の dbm_open が呼ばれます。

  % LD_PRELOAD=$prefix/lib/libgdbm_compat.so.4 ./ruby -rdbm -e 'DBM.open("a")'
  % ls -l a.*
  -rw-r--r--  1 akr  akr     16 Feb 19 12:10 a.dir
  -rw-r--r--  1 akr  akr  49152 Feb 19 12:10 a.pag
  % file a.*
  a.dir: GNU dbm 2.x database
  a.pag: data

で、FreeBSD で、LD_PRELOAD とか変なことをせずに
dbm.so から、GDBM の dbm_open を呼び出すにはどうしたらいいんでしょう?

まぁ、FreeBSD で、GDBM を (gdbm 拡張でなく、わざわざ) dbm 拡張経由で
使うというのはまずない状況という気はするんですが。




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

In This Thread

Prev Next