[EMAIL PROTECTED] wrote:
- I changed a mod_perl page to actually print out gid and egid. Both $(
and $) are actually a space seperated list of group ids, what I found is
that under mod_perl  I get:

$GID    451 451
$EGID   -19253340 451

451 is fliclearusers, the primary group of my account. I have no idea
where this negative number comes from. Certainly running perl -e 'print
$)' doesn't return it.

So I'm again at the stage where I'm thinking is is an issue with the
state of the perl/mod_perl interpreter rather than my code or a CPAN
module's code.

Can anyone shed any light on that negative egid value?   (/usr/bin/ps
certainly doesn't show such a value)

My guess as to why $EGID is negative is that it's exceeding 2**32/2 - it's signed int according to the source (mp1). The only reason I'm guessing here is that I had to fix a sprintf bug not too long ago where our interpolated object ids were returning negative numbers because we exceeded 2 billion transactions in our system.

src/modules/perl/perl_util.c

668 void mod_perl_init_ids(void)  /* $$, $>, $), etc */
669 {
670     if(set_ids++) return;
671     sv_setiv(GvSV(gv_fetchpv("$", TRUE, SVt_PV)), (I32)getpid());
672 #ifndef WIN32
673     uid  = (int)getuid();
674     euid = (int)geteuid();
675     gid  = (int)getgid();
676     egid = (int)getegid();
677     MP_TRACE_g(fprintf(stderr,
678              "perl_init_ids: uid=%d, euid=%d, gid=%d, egid=%d\n",
679              uid, euid, gid, egid));
680 #endif
681 }

> What I found was if I changed my Website::Proxy module to load all
> modules on webserver startup (i.e. in it's own BEGIN block) rather
> than on demand then the eval errors there stopped. This seems to imply
> that the interpreter is getting into a confused state after some
> continued use.

Or maybe this is a bug in getegid where it's not clearing a previous memory state. What platform is this on?

Question - are you preloading these modules in startup.pl or something similar? It sounds like you aren't from the snippet above.

Reply via email to