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]

Reply via email to