ruby-trunk-changes r61571 - r61577

今日は主に昨日の変更の再修正などがありました。

ko1: r61571 2018-01-03 00:29:58 +0900

r61565 のうち vm_block_iseq() のほうの修正は revert して、かわりに呼び元のひとつである rb_raw_obj_info() でチェックして呼び出さないようにしています。 vm_block_iseq() の呼び元は他にもあるので、極力不要な分岐を抑えるようにしています。 [ruby-dev:50407] [Bug #14270]

svn: r61572 2018-01-03 00:29:59 +0900

version.h の日付更新。

normal: r61573 2018-01-03 06:23:47 +0900

thread_pthread.c の ubf_wakeup_all_threads() で ccan の linked list の構造体ポインタから rb_thread_t のポインタを得るのに offsetof() を使って計算していたのを、container_of() というマクロ(たぶん)を使うようにしています。これは linked list 構造体のために導入している ccan で定義されているマクロのようです。

normal: r61574 2018-01-03 06:51:59 +0900

r61560 で GCC 拡張の offsetof() マクロの使いかたを避けるために struct autoload_state のメンバーの union を展開したのを、struct list_node のメンバー waitq のひとつだけに統合して、必要に応じて list_head にキャストして利用するようにしています。これ head と node が同じノードを常に指してても問題はないのか。まあ差分をぱっと見たかぎり node が別の位置を指すことはなさそうにみえます。

shyouhei: r61575 2018-01-03 10:43:17 +0900

r61545 で消し忘れの #undef zx を削除しています。

nobu: r61576 2018-01-03 18:05:18 +0900

r61559 で ruby_xmalloc のシンボルの一致でリンクされる libruby のバージョンの一致をチェックする処理を xmalloc_mismatch_p() という関数に切り出したものを USE_DLN_DLOPEN が定義されていて dlopen(3) が使える時だけ定義するように preprocessor の分岐を追加しています。 MAYBE_UNUSED() マクロつきで定義したのがなにか問題があったみたい? 実際に呼ばれているのは dlsym(3) ですが dlopen(3) が使えるなら dlsym() も使えるはずという仮定ですね。

nobu: r61577 2018-01-03 18:19:11 +0900

r61576 の続きで xmalloc_mismatch_p() を dln_incompatible_library_p() に改名して、また prototype 宣言は削除しています。