The session module may not work due to an unknown (and until now, IMO, misdiagnosed) problem,
if it does, please report it!
return SUCCESS;
}
-void _php_odbc_shutdown(void *data)
+
+#if 0
+static void _php_odbc_shutdown(void *data)
{
ELS_FETCH();
zend_hash_apply(&EG(regular_list), (int (*)(void *)) _odbc_stmt_cleanup);
}
+#endif
+
PHP_RINIT_FUNCTION(odbc)
{
ODBCG(defConn) = -1;
ODBCG(num_links) = ODBCG(num_persistent);
- php_register_pre_request_shutdown(_php_odbc_shutdown, NULL);
+ /* This should no longer be necessary, as hash_apply() is reentrant
+ * php_register_pre_request_shutdown(_php_odbc_shutdown, NULL);
+ */
return SUCCESS;
}
PHP_MINIT_FUNCTION(session);
PHP_RINIT_FUNCTION(session);
PHP_MSHUTDOWN_FUNCTION(session);
+PHP_RSHUTDOWN_FUNCTION(session);
PHP_MINFO_FUNCTION(session);
static void php_rinit_session_globals(PSLS_D);
"Session Management",
session_functions,
PHP_MINIT(session), PHP_MSHUTDOWN(session),
- PHP_RINIT(session), NULL,
+ PHP_RINIT(session), PHP_RSHUTDOWN(session),
PHP_MINFO(session),
STANDARD_MODULE_PROPERTIES,
};
}
-void _php_session_shutdown(void *data)
-{
- PSLS_FETCH();
-
- if(PS(nr_open_sessions) > 0) {
- _php_session_save_current_state(PSLS_C);
- PS(nr_open_sessions)--;
- }
- php_rshutdown_session_globals(PSLS_C);
-}
-
PHP_RINIT_FUNCTION(session)
{
PSLS_FETCH();
_php_session_start(PSLS_C);
}
- php_register_pre_request_shutdown(_php_session_shutdown, NULL);
+ return SUCCESS;
+}
+
+PHP_RSHUTDOWN_FUNCTION(session)
+{
+ PSLS_FETCH();
+
+ if(PS(nr_open_sessions) > 0) {
+ _php_session_save_current_state(PSLS_C);
+ PS(nr_open_sessions)--;
+ }
+ php_rshutdown_session_globals(PSLS_C);
return SUCCESS;
}
+
+
PHP_MINIT_FUNCTION(session)
{
#ifdef ZTS
}
}
-static void php_start_request_hook(void *data)
-{
- php_request_hook *ptr = (php_request_hook *) data;
-
- ptr->func(ptr->userdata);
-}
-
-static void php_execute_pre_request_shutdown(PLS_D)
-{
- if (PG(pre_request_shutdown_ok)) {
- zend_llist_apply(&PG(ll_pre_request_shutdown), php_start_request_hook);
- zend_llist_destroy(&PG(ll_pre_request_shutdown));
- PG(pre_request_shutdown_ok) = 0;
- }
-}
-
-
-void php_register_pre_request_shutdown(void (*func)(void *), void *userdata)
-{
- php_request_hook ptr;
- PLS_FETCH();
-
- if (!PG(pre_request_shutdown_ok)) {
- zend_llist_init(&PG(ll_pre_request_shutdown), sizeof(php_request_hook), NULL, 0);
- PG(pre_request_shutdown_ok) = 1;
- }
-
- ptr.func = func;
- ptr.userdata = userdata;
-
- zend_llist_add_element(&PG(ll_pre_request_shutdown), &ptr);
-}
-
int php_request_startup(CLS_D ELS_DC PLS_DC SLS_DC)
{
SLS_FETCH();
PLS_FETCH();
- php_execute_pre_request_shutdown(PLS_C);
-
sapi_send_headers();
php_end_ob_buffering(SG(request_info).headers_only?0:1);
long max_execution_time;
unsigned char header_is_being_sent;
-
- zend_llist ll_pre_request_shutdown;
-
- zend_bool pre_request_shutdown_ok;
};
-typedef struct {
- void (*func)(void *);
- void *userdata;
-} php_request_hook;
-
#endif /* _PHP_GLOBALS_H */
/*