dougm 01/09/15 17:56:15 Modified: src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h Log: init ids for ithread Perls Revision Changes Path 1.69 +6 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.68 retrieving revision 1.69 diff -u -r1.68 -r1.69 --- mod_perl.c 2001/09/15 22:26:57 1.68 +++ mod_perl.c 2001/09/16 00:56:15 1.69 @@ -354,10 +354,14 @@ static void modperl_hook_child_init(apr_pool_t *p, server_rec *s) { + modperl_perl_ids_t ids; + modperl_perl_ids_get(&ids); #ifdef USE_ITHREADS - /*XXX*/ + modperl_interp_mip_walk_servers(NULL, s, + modperl_perl_init_ids_mip, + (void*)&ids); #else - modperl_perl_init_ids(aTHX); + modperl_perl_init_ids(aTHX_ &ids); #endif } 1.2 +28 -8 modperl-2.0/src/modules/perl/modperl_perl.c Index: modperl_perl.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- modperl_perl.c 2001/09/15 22:25:29 1.1 +++ modperl_perl.c 2001/09/16 00:56:15 1.2 @@ -4,17 +4,37 @@ * others (larger tweaks) are in their own modules, e.g. modperl_env.c */ -void modperl_perl_init_ids(pTHX) +void modperl_perl_ids_get(modperl_perl_ids_t *ids) { - sv_setiv(GvSV(gv_fetchpv("$", TRUE, SVt_PV)), (I32)getpid()); - + ids->pid = (I32)getpid(); #ifndef WIN32 - PL_uid = (int)getuid(); - PL_euid = (int)geteuid(); - PL_gid = (int)getgid(); - PL_egid = (int)getegid(); + ids->uid = getuid(); + ids->euid = geteuid(); + ids->gid = getgid(); + ids->gid = getegid(); + MP_TRACE_g(MP_FUNC, "uid=%d, euid=%d, gid=%d, egid=%d\n", - PL_uid, PL_euid, PL_gid, PL_egid); + (int)ids->uid, (int)ids->euid, + (int)ids->gid, (int)ids->egid); #endif +} + +void modperl_perl_init_ids(pTHX_ modperl_perl_ids_t *ids) +{ + sv_setiv(GvSV(gv_fetchpv("$", TRUE, SVt_PV)), ids->pid); + +#ifndef WIN32 + PL_uid = ids->uid; + PL_euid = ids->euid; + PL_gid = ids->gid; + PL_egid = ids->egid; +#endif +} + +apr_status_t modperl_perl_init_ids_mip(pTHX_ modperl_interp_pool_t *mip, + void *data) +{ + modperl_perl_init_ids(aTHX_ (modperl_perl_ids_t *)data); + return APR_SUCCESS; } 1.2 +12 -1 modperl-2.0/src/modules/perl/modperl_perl.h Index: modperl_perl.h =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- modperl_perl.h 2001/09/15 22:25:29 1.1 +++ modperl_perl.h 2001/09/16 00:56:15 1.2 @@ -1,6 +1,17 @@ #ifndef MODPERL_PERL_H #define MODPERL_PERL_H -void modperl_perl_init_ids(pTHX); +typedef struct { + I32 pid; + Uid_t uid, euid; + Gid_t gid, egid; +} modperl_perl_ids_t; + +void modperl_perl_ids_get(modperl_perl_ids_t *ids); + +void modperl_perl_init_ids(pTHX_ modperl_perl_ids_t *ids); + +apr_status_t modperl_perl_init_ids_mip(pTHX_ modperl_interp_pool_t *mip, + void *data); #endif /* MODPERL_PERL_H */