HTTP::Session::Store::DBM の insert で
以下のように、
sub insert { my ( $self, $key, $value ) = @_; defined(tied %{ $self->{dbm} }); # => false になる場合がある $self->dbm->{$key} = Storable::freeze $value; }
$self->{dbm} に tie されたオブジェクトが undef になってる時がある。
ちょっと調べた
どうやら HTTP::Session::DESTROY → HTTP::Session::finalize → HTTP::Session::Store::DBM::insert という風に呼ばれた時にごくまれに起こるみたい。
ってくらいしか今の僕にはわからない。
再現する条件もいまいち分かってない><
うーん
HTTP::Session::DESTROY って、 HTTP::Session がガーベジコレクションされるときに呼ばれるのだと思ってるけど、その時点で HTTP::Session::Store::DBM に tie された SDBM_Files オブジェクトが既に解放されているってことありえるのかなー。