Steve Hay wrote:
[...]
> Thus, the end of my mod_perl build goes like this:
>
> msdev src\modules\win32\mod_perl.dsp /MAKE "mod_perl - Win32
> Release" /USEENV
> --------------------Configuration: mod_perl - Win32
> Release--------------------
> Compiling...
> Apache.c
> Connection.c
> Constants.c
> File.c
> Log.c
> ModuleConfig.c
> ModuleConfig.xs(72) : warning C4715: 'vector_from_sv' : not all
> control paths return a value
> mod_perl.c
> mod_perl_opmask.c
> perl_config.c
> perl_util.c
> perlio.c
> perlxsi.c
> Server.c
> Table.c
> URI.c
> Util.c
> Linking...
> Creating library Release/mod_perl.lib and object
> Release/mod_perl.exp
>
> mod_perl.so - 0 error(s), 1 warning(s)
>
> Notice the "Win32 Release" configuration there. So you need to rebuild
> mod_perl.so in debug mode after running the initial "nmake". You can
> do so by running the following command (from the top-level directory):
>
> msdev src\modules\win32\mod_perl.dsp /MAKE "mod_perl - Win32 Debug"
Oops! I missed the " /USEENV" off the end of that command-line. You need
that too, as per the original command-line shown above.
[...]
> PerlIOUnix_setfd() is calling PerlIOUnix_refcnt_inc(fd)
> with fd 0. Simply put a breakpoint on line 2548 in perlio.c and it
> crashes the first time it hits it. Stepping inside
> PerlIOUnix_refcnt_inc() I find that it reaches the line
>
> MUTEX_LOCK(&PL_perlio_mutex);
>
> (which is only present in the USE_ITHREADS case) and crashes there.
> PL_perlio_mutex itself is a valid struct, but all its members are 0 or
> 0x00000000. I don't know if that's normal.
>
> On Win32, MUTEX_LOCK(m) seems to be #defined as
> EnterCriticalSection(m) (in win32\win32thread.h, given that
> DONT_USE_CRITICAL_SECTION is never #defined anywhere). Hmm. The
> comment there says "Critical Sections used instead of mutexes:
> lightweight, but can't be communicated to child processes ...". I
> wonder if the other case in that #ifndef might be worth trying,
> although that wouldn't be the default build option so we shouldn't
> need to do that... Perhaps Jan can assist here?
I tried a build with DONT_USE_CRITICAL_SECTION defined, but it behaves
exactly the same except that the other #definition of MUTEX_LOCK(m) is
now used, namely:
# define MUTEX_LOCK(m) \
STMT_START { \
if (WaitForSingleObject(*(m),INFINITE) == WAIT_FAILED) \
Perl_croak_nocontext("panic: MUTEX_LOCK"); \
} STMT_END
so I get a "panic: MUTEX_LOCK" error instead of the crash! Or at least,
that's the string shown in "pat" in Perl_croak_nocontext() by the
debugger, but the console output actually says:
parse: Bad file descriptor
I'm not sure if that's any kind of clue.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]