2018-08-21
devnexen: Avoid directly adding to string literal
- https://github.com/php/php-src/commit/16a9dd74f4cd5e79eeffe2e567bfcec4d1369916
- ext/standard の image_type_to_extension() で、clang の警告を潰した
- 結果にドットを含めるかどうかの処理で、リテラルのアドレスに直接フラグの値(0 or 1)を加算する形で返り値をずらしてたのが警告になってたもよう
- 「黙れ clang」という気がしなくもない
dstogov: Removed dead code
- https://github.com/php/php-src/commit/5e5311e0ba3dc3ff431fd5af1c2705ec8334c7c6
- 20 日の BIND_STATIC の修正 で第 2 オペランドがいらなくなったので不要コードを除去
devnexen: Support fixed address mmap without replacement
- https://github.com/php/php-src/commit/0f68ff5c92924deb9401ce66458e67f250ccde74
- メモリアロケータの修正
- メモリアロケータが OS から追加の領域を取ってくる際(realloc 的な)、Windows 以外では mmap() を使っていた
- なるべく地続きのメモリ領域を確保するために MAP_FIXED が使いたかったが、MAP_FIXED はすでに別途で使われている領域を指定されると、元からいる奴をぶっ飛ばすという恐ろしいブツだったため、使えなかった
- 最近めに MAP_FIXED_NOREPLACE という、先客がいたらぶっ飛ばさないで諦める奴が追加されたので、Linux ではそちらを使い、FreeBSD では同様の挙動の MAP_FIXED|MAP_EXCL を使うようになった
-
これ元実装では先客がいたら別の箇所を確保して返すだけだったけど、修正後だと単に諦めてしまうの、別によいのだろうか、という気持ち- 聞いてみたところ、「元の奴ずれたら munmap() してたので意図通りやでー、でもこの際 munmap() に失敗しない限りエラーメッセージは出してなかったので、エラー時の処理はびみょそう」という話があった
- そんでスッと PR がきた https://github.com/php/php-src/pull/3456 ので親指だけ立てといた
dstogov: Don't use second operand of BIND_STATIC instruction.
- https://github.com/php/php-src/commit/6d88e1ccd67d0b3e57679b3c6caa330de22765d8
- こちらも BIND_STATIC で第 2 オペランドがいらなくなったのをうけ、オペコード/オペコードハンドラ側で第 2 オペランドを UNUSED に修正
- なお、全然別の修正で array_key_exists() に専用のオペコード割り当てて最適化する、という PR が存在し、「あっちは 7.3 にはもう Feature Freeze だからダメって聞いたけど、こっちの BIND_STATIC の修正は何で入れるの!何で入れていいの!」的な会話が 20 日の元修正コミットへのコメントであり、dmitry は「自己完結してる修正は beta でも入れて良いはず、API/ABI の互換性は崩さない方いいけど、あと array_key_exists() についてはちゃんとレビューあればそっちも入れていいんじゃね?」などと言ってたりする
dstogov: Cleanup
- https://github.com/php/php-src/commit/168376e98e533f9f99159d9f5516e03ab823a302
- ext/opcache で関数テーブル/クラスエントリの破棄処理をリファクタリング
- 元コードでは関数テーブルとクラスエントリのデストラクタをオーバーライドする所があった
- 関数テーブルのデストラクタは、対象がユーザ定義関数で、静的変数があって immutable でなくて、参照カウントを 1 つ減らして 0 になるようなら、静的変数のハッシュテーブルを破棄、というもの
- クラスのデストラクタは、そのクラスの関数テーブルを同様の処理でオーバーライドするもの
- これらのオーバーライドされたデストラクタは、free_persistent_script() の第 2 引数が 1 のケースで呼ばれる
- free_persistent_script() の第 2 引数へ 1 を渡して呼ぶ箇所は同時に zend_accel_free_user_functions() を呼ぶ箇所でもあり、なのでそっちにハッシュテーブルの破棄処理を移動した形のもよう
- 元コードは黙って efree() な感じに見えるので、破棄処理の内容も変わってそう?ここの具体的な差異までは追ってない
nikic: Drop dead code
- https://github.com/php/php-src/commit/045b74c12c0c2edde44bd0a8a3898a4aad2a1052
- zend_compile_static_var_common() の不要コードの削除