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; }