|
[ruby-list:42093] [ANN] ruby-oci8 0.1.15: msg#00124lang.ruby.japanese
OCI8 を使用した Oracle モジュール ruby-oci8 0.1.15 をリリースしました。 URL:http://rubyforge.org/projects/ruby-oci8/ What's new: * 新機能.... なし。:-< * バインド済みのプレースホルダーに再度バインドしたときのメモリ消費を削減 require 'oci8' conn = OCI8.new('ruby', 'oci8') cursor = conn.parse('select * from foo where key = :key') 0.upto(10000) do |key| # cursor.close を実行するまでバインド値は解放されなかった。 # 今は GC が走ると解放される。 cursor.bind_param('key', key) cursor.exec .... fetch .... end * プロセス終了時の潜在的なセグメンテーションフォルトの修正 プロセス終了時には ruby のオブジェクトは予測不能な順番で解放される。 OCIEnv のインスタンスが OCIRowid オブジェクトより先に解放された場合、 セグメンテーションフォルトが起こっていた。 * $0 に値を設定したときの問題の回避コードの追加 ruby 1.8.4、ruby-oci8 0.1.14、Oracle 10.1.0 の組み合わせで UNIX 上で 以下のコードを実行すると環境変数が見えなくなる。 (Oracle 10.2.0 や ruby 1.8.2 では問題なし) require 'oci8' ENV['HOME'] # --> ちゃんとした値 $0 = 'foo' ENV['HOME'] # --> nil 以下の条件のとき変になるようです。ruby 1.8.4 のみ 1. ruby スクリプトで環境変数を変更してない、または拡張ライブラリ側 で ruby_setenv() を呼んで環境変数を変更していない状態で以下を 実行。 2. 拡張ライブラリ側で putenv() で環境変数に値を追加する。 内部的には char **environ が realloc されて environ のアドレス がプロセス起動時のアドレスからずれる。 3. $0 へ値を設定。 ruby.c の1053行目で、環境変数を別の領域へコピーするため ruby_setenv("", NULL); /* duplicate environ vars */ が実行されるが、2 で environ の値が origenviron からずれたため、 環境変数がコピーされない。その状態で元々の環境変数ブロックがス ペースでクリヤされるため、プロセス起動時にあった環境変数が参照 できなくなる。 * コンパイル時のレジストリの検索パスの修正。 (OracleXE Windows版用) -- KUBO Takehiro email: kubo-MPg98oU6eI0dnm+yROfE0A@xxxxxxxxxxxxxxxx web: http://www.jiubao.org GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1 9F47 C001 1F93 AC08 2262
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:42092] Gtk::CTree, Takeshi Honda |
|---|---|
| Next by Date: | [ruby-list:42094] Re: Gtk::CTree, Masao Mutoh |
| Previous by Thread: | [ruby-list:42092] Gtk::CTree, Takeshi Honda |
| Next by Thread: | [ruby-list:42095], 岩崎 弘孝 |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |