用户登录时(bbs2www/lib/bbslib.c www_user_login()里加入)用getSession()改动sessi
on的某一字段,用于分配某个与session相关的临时权限(即登录时分配,用户退出或掉线
权限自然消失,这些权限在Telnet下测试一切正常)
但用web操作的时候发生了极其诡异的事件,getSession()有时能够得到这个新值,有时只
能得到改动前的值。打出bbslog,发现以下几个函数中极容易出状况
phpbbs.board.c bbs_safe_getboard() bbs_getboards()
但不排除其它函数里也会有同样情况(sorry,每次加bbslog都要重新启动,好麻烦的)
通过查阅代码发现,并没有定义THREAD_SAFE宏,因此全局变量session_t g_session应该不
是线程安全的;然而再次发现无论bbslib.c还是phplib/下的咚咚都没有在更改session时加
锁或提供线程安全的保护.
如何才能保证在任何情况下用getSession()都可以做到万无一失,请各位大大不吝赐教
btw, Web Server用的超级传统的apache2-mpm-prefork,MaxClients等进程/线程相关配置采
用Debian Sarge缺省设置
--
FROM 218.249.29.*