dougm 01/12/05 11:00:29
Modified: src/modules/perl modperl_global.c
xs/Apache/RequestUtil Apache__RequestUtil.h
Log:
various bug fixes in the tls code:
- reset global request_rec to NULL when request is over
- proper deferencing in modperl_tls_reset()
- proper intialization in modperl_tls_reset_cleanup()
Revision Changes Path
1.4 +10 -3 modperl-2.0/src/modules/perl/modperl_global.c
Index: modperl_global.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_global.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- modperl_global.c 2001/05/04 05:49:19 1.3
+++ modperl_global.c 2001/12/05 19:00:29 1.4
@@ -25,6 +25,9 @@
/* reset after subrequests */
modperl_tls_reset_cleanup_request_rec(r->pool, r->main);
}
+ else {
+ modperl_tls_reset_cleanup_request_rec(r->pool, NULL);
+ }
}
void modperl_global_request_obj_set(pTHX_ SV *svr)
@@ -181,15 +184,19 @@
static apr_status_t modperl_tls_reset(void *data)
{
- modperl_tls_cleanup_data_t *cdata;
- return modperl_tls_set(cdata->key, data);
+ modperl_tls_cleanup_data_t *cdata =
+ (modperl_tls_cleanup_data_t *)data;
+ return modperl_tls_set(cdata->key, cdata->data);
}
void modperl_tls_reset_cleanup(apr_pool_t *p, modperl_tls_t *key,
void *data)
{
modperl_tls_cleanup_data_t *cdata =
- (modperl_tls_cleanup_data_t *)apr_pcalloc(p, sizeof(*cdata));
+ (modperl_tls_cleanup_data_t *)apr_palloc(p, sizeof(*cdata));
+
+ cdata->key = key;
+ cdata->data = data;
apr_pool_cleanup_register(p, (void *)cdata,
modperl_tls_reset,
1.12 +1 -1 modperl-2.0/xs/Apache/RequestUtil/Apache__RequestUtil.h
Index: Apache__RequestUtil.h
===================================================================
RCS file: /home/cvs/modperl-2.0/xs/Apache/RequestUtil/Apache__RequestUtil.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- Apache__RequestUtil.h 2001/11/13 17:42:49 1.11
+++ Apache__RequestUtil.h 2001/12/05 19:00:29 1.12
@@ -85,7 +85,7 @@
static MP_INLINE
request_rec *mpxs_Apache_request(pTHX_ SV *classname, SV *svr)
{
- request_rec *cur;
+ request_rec *cur = NULL;
apr_status_t status = modperl_tls_get_request_rec(&cur);
if (status != APR_SUCCESS) {