Windows上のCatalystでFastMmap

いささか旧聞に属する話ですが、使えるようになっていたんですね。個人的にハマりまくっていた時期だったのですっかり見落としていました。

MSVCでコンパイルする場合はCache-FastMmap-CImpl/win32.cの先頭の方に

#ifdef _MSC_VER
#define vsnprintf _vsnprintf
#endif

と書いておく必要があるのと、Mmap用の共有ファイルを渡すときに開きっぱなしのファイルを渡さないようにする必要があるのが注意点といえば注意点。

具体的には、Catalyst::Plugin::Session::Store::FastMmap 0.02のt/basic.tのようなことをせず(これだと共有ファイルをtruncateできないと言って怒られる)、

use Catalyst::Plugin::Session::Test::Store (
    backend => "FastMmap",
    config  => {
        storage => ( my $tmp = File::Temp->new( UNLINK => 1 ) )
          ->filename,    # $tmp: positive refcount
    },
);

こんな風にしておくべし、と。

use Catalyst::Plugin::Session::Test::Store (
    backend => "FastMmap",
    config  => {
        storage => scalar File::Temp::tmpnam()
    },
);

CPANにアップされるまではうちのリポジトリにも入れませんが、Ash Berlin氏に感謝!