Author: stas Date: Wed Nov 24 11:33:52 2004 New Revision: 106451 URL: http://svn.apache.org/viewcvs?view=rev&rev=106451 Log: replace the slow implementation of anon handlers using B::Deparse, with per-interpreter cache of compiled CODE refs (sort of emulating named subroutines for anonymous handlers) / part2
Modified: perl/modperl/trunk/src/modules/perl/modperl_global.c perl/modperl/trunk/src/modules/perl/modperl_global.h Modified: perl/modperl/trunk/src/modules/perl/modperl_global.c Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_global.c?view=diff&rev=106451&p1=perl/modperl/trunk/src/modules/perl/modperl_global.c&r1=106450&p2=perl/modperl/trunk/src/modules/perl/modperl_global.c&r2=106451 ============================================================================== --- perl/modperl/trunk/src/modules/perl/modperl_global.c (original) +++ perl/modperl/trunk/src/modules/perl/modperl_global.c Wed Nov 24 11:33:52 2004 @@ -165,6 +165,38 @@ MP_GLOBAL_IMPL(pconf, apr_pool_t *); MP_GLOBAL_IMPL(server_rec, server_rec *); + + + + +/*** anon handlers code ***/ + +static modperl_global_t MP_global_anon_cnt; + +void modperl_global_anon_cnt_init(apr_pool_t *p) +{ + int *data = (int *)apr_pcalloc(p, sizeof(int)); + *data = 0; + modperl_global_init(&MP_global_anon_cnt, p, (void *)data, "anon_cnt"); +} + +int modperl_global_anon_cnt_next(void) +{ + int next; + /* XXX: inline lock/unlock? */ + modperl_global_lock(&MP_global_anon_cnt); + + next = ++*(int *)(MP_global_anon_cnt.data); + + modperl_global_unlock(&MP_global_anon_cnt); + + return next; +} + + + +/*** TLS ***/ + #if MP_THREADED static apr_status_t modperl_tls_cleanup(void *data) { Modified: perl/modperl/trunk/src/modules/perl/modperl_global.h Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_global.h?view=diff&rev=106451&p1=perl/modperl/trunk/src/modules/perl/modperl_global.h&r1=106450&p2=perl/modperl/trunk/src/modules/perl/modperl_global.h&r2=106451 ============================================================================== --- perl/modperl/trunk/src/modules/perl/modperl_global.h (original) +++ perl/modperl/trunk/src/modules/perl/modperl_global.h Wed Nov 24 11:33:52 2004 @@ -63,6 +63,9 @@ /* modperl_global_get_server_rec returns a thread un-safe object */ MP_GLOBAL_DECL(server_rec, server_rec *); +void modperl_global_anon_cnt_init(apr_pool_t *p); +int modperl_global_anon_cnt_next(void); + apr_status_t modperl_tls_create(apr_pool_t *p, modperl_tls_t **key); apr_status_t modperl_tls_get(modperl_tls_t *key, void **data); apr_status_t modperl_tls_set(modperl_tls_t *key, void *data);