#26005 [Opn->Csd]: Random "cannot change the session's ini settings" errors

2004-02-25 Thread sniper
 ID:   26005
 Updated by:   [EMAIL PROTECTED]
 Reported By:  parsnip11 at hotmail dot com
-Status:   Open
+Status:   Closed
 Bug Type: Session related
 Operating System: *
 PHP Version:  4CVS-2003-10-31
 New Comment:

Get the latest stable CVS snapshot. And don't reopen closed bugs unless
you can still reproduce it with the snapshot..




Previous Comments:


[2004-02-25 13:28:20] parsnip11 at hotmail dot com

Is there any way that I can apply this patch to php4isapi.dll?



[2004-02-24 03:42:35] [EMAIL PROTECTED]

Patch applied. Thanks!





[2004-02-23 07:11:43] jsnajdr at kerio dot com

This is a patch that stopped crashing for me:



*** php-4.3.4/ext/session/session.c Wed Oct  8 12:25:39 2003

--- php-4.3.4-n/ext/session/session.c   Tue Dec  9 11:36:24 2003

***

*** 1543,1548 

--- 1543,1556 

}

  }

  

+ static void php_session_init_globals(php_ps_globals *ps_globals
TSRMLS_DC)

+ {

+   ps_globals->id = NULL;

+   ps_globals->session_status = php_session_none;

+   ps_globals->mod_data = NULL;

+   ps_globals->http_session_vars = NULL;

+ }

+ 

  static void php_rinit_session_globals(TSRMLS_D)

  { 

PS(id) = NULL;

***

*** 1618,1624 

  #ifdef ZTS

php_ps_globals *ps_globals;

  

!   ts_allocate_id(&ps_globals_id, sizeof(php_ps_globals), NULL, NULL);

ps_globals = ts_resource(ps_globals_id);

  #endif

  

--- 1626,1632 

  #ifdef ZTS

php_ps_globals *ps_globals;

  

!   ts_allocate_id(&ps_globals_id, sizeof(php_ps_globals),
(ts_allocate_ctor) php_session_init_globals, NULL);

ps_globals = ts_resource(ps_globals_id);

  #endif



[2003-12-08 14:29:29] jsnajdr at kerio dot com

I am experiencing this bug too and I think I found its cause. It can
occur when PHP is used in a multithreaded program - I embed PHP
interpreter in my own multithreaded server using a custom SAPI module,
original submitter of this bug uses ISAPI module, which is also
multithreaded.



The 'Session is active' warning is generated by the
PHP_INI_MH(OnUpdateSaveHandler) function that checks
PS(session_status), i.e. the session module globals structure. This
handler is also called when calling TSRMLS_FETCH() (which is a define
for ts_resource_ex() call) before executing a PHP script. See this call
stack from gdb:



#0  OnUpdateSaveHandler (entry=0xb303890, new_value=0x8700f48 "files",
new_value_length=5, mh_arg1=0x0, mh_arg2=0x0, mh_arg3=0x0, stage=1,
tsrm_ls=0xb2dce18)

at /root/src/php-4.3.4/ext/session/session.c:93

#1  0x0865414c in zend_ini_refresh_cache (p=0xb303890, stage=1,
tsrm_ls=0xb2dce18) at /root/src/php-4.3.4/Zend/zend_ini.c:177

#2  0x0865006f in zend_hash_apply_with_argument (ht=0xb300ac8,
apply_func=0x8654124 , argument=0x1,
tsrm_ls=0xb2dce18)

at /root/src/php-4.3.4/Zend/zend_hash.c:717

#3  0x0865417d in zend_ini_refresh_caches (stage=1, tsrm_ls=0xb2dce18)
at /root/src/php-4.3.4/Zend/zend_ini.c:185

#4  0x08653f88 in zend_copy_ini_directives (tsrm_ls=0xb2dce18) at
/root/src/php-4.3.4/Zend/zend_ini.c:104

#5  0x0864b574 in zend_new_thread_end_handler (thread_id=4423709,
tsrm_ls=0xb2dce18) at /root/src/php-4.3.4/Zend/zend.c:374

#6  0x0862724f in allocate_new_resource
(thread_resources_ptr=0xabac72c, thread_id=4423709) at
/root/src/php-4.3.4/TSRM/TSRM.c:282

#7  0x08627305 in ts_resource_ex (id=0, th_id=0x0) at
/root/src/php-4.3.4/TSRM/TSRM.c:341 



But this handler reads unitialized memory in the new thread's
ps_globals - the TSRM resource has NULL constructor and TSRMLS_FETCH is
called before php_request_startup(), where all the modules are
activated and where the PHP_RINIT_FUNCTION(session) is called to
construct the structure.



Solution: the ps_globals resource must have a non-null constructor
registered in ts_allocate_resource() call in ext/session/session.c



[2003-10-27 10:52:27] parsnip11 at hotmail dot com

Description:

I am recently upgraded to php 4.3.3 from 4.2.9 and am using the
php4isapi.dll on iis. My application has been working w/o any problems
for quite awhile and after the upgrade, without rhyme or reason I am
getting the following error every few days:



PHP Warning:  Unknown(): A session is active. You cannot change the
session module's ini settings at this time. in Unknown on line 0



I have no ini_set statement in my application and have even set my
php.ini to read only in the event that it was somehow being modified.
My application is EXTREMELY simple... it's basically just consists of a
few html forms submitting to a sql db. Aut

#26005 [Opn->Csd]: Random "cannot change the session's ini settings" errors

2004-02-24 Thread sniper
 ID:   26005
 Updated by:   [EMAIL PROTECTED]
 Reported By:  parsnip11 at hotmail dot com
-Status:   Open
+Status:   Closed
 Bug Type: Session related
 Operating System: *
 PHP Version:  4CVS-2003-10-31
 New Comment:

Patch applied. Thanks!




Previous Comments:


[2004-02-23 07:11:43] jsnajdr at kerio dot com

This is a patch that stopped crashing for me:



*** php-4.3.4/ext/session/session.c Wed Oct  8 12:25:39 2003

--- php-4.3.4-n/ext/session/session.c   Tue Dec  9 11:36:24 2003

***

*** 1543,1548 

--- 1543,1556 

}

  }

  

+ static void php_session_init_globals(php_ps_globals *ps_globals
TSRMLS_DC)

+ {

+   ps_globals->id = NULL;

+   ps_globals->session_status = php_session_none;

+   ps_globals->mod_data = NULL;

+   ps_globals->http_session_vars = NULL;

+ }

+ 

  static void php_rinit_session_globals(TSRMLS_D)

  { 

PS(id) = NULL;

***

*** 1618,1624 

  #ifdef ZTS

php_ps_globals *ps_globals;

  

!   ts_allocate_id(&ps_globals_id, sizeof(php_ps_globals), NULL, NULL);

ps_globals = ts_resource(ps_globals_id);

  #endif

  

--- 1626,1632 

  #ifdef ZTS

php_ps_globals *ps_globals;

  

!   ts_allocate_id(&ps_globals_id, sizeof(php_ps_globals),
(ts_allocate_ctor) php_session_init_globals, NULL);

ps_globals = ts_resource(ps_globals_id);

  #endif



[2003-12-08 14:29:29] jsnajdr at kerio dot com

I am experiencing this bug too and I think I found its cause. It can
occur when PHP is used in a multithreaded program - I embed PHP
interpreter in my own multithreaded server using a custom SAPI module,
original submitter of this bug uses ISAPI module, which is also
multithreaded.



The 'Session is active' warning is generated by the
PHP_INI_MH(OnUpdateSaveHandler) function that checks
PS(session_status), i.e. the session module globals structure. This
handler is also called when calling TSRMLS_FETCH() (which is a define
for ts_resource_ex() call) before executing a PHP script. See this call
stack from gdb:



#0  OnUpdateSaveHandler (entry=0xb303890, new_value=0x8700f48 "files",
new_value_length=5, mh_arg1=0x0, mh_arg2=0x0, mh_arg3=0x0, stage=1,
tsrm_ls=0xb2dce18)

at /root/src/php-4.3.4/ext/session/session.c:93

#1  0x0865414c in zend_ini_refresh_cache (p=0xb303890, stage=1,
tsrm_ls=0xb2dce18) at /root/src/php-4.3.4/Zend/zend_ini.c:177

#2  0x0865006f in zend_hash_apply_with_argument (ht=0xb300ac8,
apply_func=0x8654124 , argument=0x1,
tsrm_ls=0xb2dce18)

at /root/src/php-4.3.4/Zend/zend_hash.c:717

#3  0x0865417d in zend_ini_refresh_caches (stage=1, tsrm_ls=0xb2dce18)
at /root/src/php-4.3.4/Zend/zend_ini.c:185

#4  0x08653f88 in zend_copy_ini_directives (tsrm_ls=0xb2dce18) at
/root/src/php-4.3.4/Zend/zend_ini.c:104

#5  0x0864b574 in zend_new_thread_end_handler (thread_id=4423709,
tsrm_ls=0xb2dce18) at /root/src/php-4.3.4/Zend/zend.c:374

#6  0x0862724f in allocate_new_resource
(thread_resources_ptr=0xabac72c, thread_id=4423709) at
/root/src/php-4.3.4/TSRM/TSRM.c:282

#7  0x08627305 in ts_resource_ex (id=0, th_id=0x0) at
/root/src/php-4.3.4/TSRM/TSRM.c:341 



But this handler reads unitialized memory in the new thread's
ps_globals - the TSRM resource has NULL constructor and TSRMLS_FETCH is
called before php_request_startup(), where all the modules are
activated and where the PHP_RINIT_FUNCTION(session) is called to
construct the structure.



Solution: the ps_globals resource must have a non-null constructor
registered in ts_allocate_resource() call in ext/session/session.c



[2003-10-27 10:52:27] parsnip11 at hotmail dot com

Description:

I am recently upgraded to php 4.3.3 from 4.2.9 and am using the
php4isapi.dll on iis. My application has been working w/o any problems
for quite awhile and after the upgrade, without rhyme or reason I am
getting the following error every few days:



PHP Warning:  Unknown(): A session is active. You cannot change the
session module's ini settings at this time. in Unknown on line 0



I have no ini_set statement in my application and have even set my
php.ini to read only in the event that it was somehow being modified.
My application is EXTREMELY simple... it's basically just consists of a
few html forms submitting to a sql db. Authentication happens via IIS
and I'm using $AUTH_USER to get the user id. 



Since this error is extremely intermittent and only happens 2 or 3
times a week, I cant seem to figure out what line seems or even what
function is causing this error. I know that bugs cannot be solved w/o a
code example that generates the error but I canAll I know is that the
version of PHP is all that's changed so I'm inclined to think it's a
bug