phpopengl を有効にするだけで segふぉる問題対応

php.ini で opengl を有効にするだけで、
php で fatal を発生させると(存在しない関数を呼ぶとか、存在しないファイルを require するとか)
segmentation fault する問題があったので追ってみた。

php_opengl.c

PHP_MINIT_FUNCTION(opengl)
{
<略>
        glget_mask = (char*)emalloc((glget_max+1) * sizeof(char));
<略>
}
PHP_MSHUTDOWN_FUNCTION(opengl)
{
        if (glget_mask != NULL)
                efree(glget_mask);

        return SUCCESS;
}

いや。。。それは落ちるってば。
emalloc で確保したメモリ領域はリクエスト毎の寿命を持つので、
MSHUTDOWN でアクセスできる訳がないです。

という訳で、emalloc/efree を pemalloc/pefree(persistent指定) に直して解決。

PHP_MINIT_FUNCTION(opengl)
{
<略>
        glget_mask = (char*)pemalloc((glget_max+1) * sizeof(char), 1);
<略>
}
PHP_MSHUTDOWN_FUNCTION(opengl)
{
        if (glget_mask != NULL)
                pefree(glget_mask, 1);

        return SUCCESS;
}

github

git commit & pull しました。