Re: POE::Component::Client::Keepalive crashes perl (5.16) on Windows

[email protected] (Rocco Caputo) Sun, 15 Feb 2015 13:35:53 -0500
Newsgroups perl.poe
Message-ID <[email protected]>
> On Feb 15, 2015, at 06:59, Michael Lackhoff <[email protected]> =
wrote:
>=20
> When it comes to the dependency mentioned
> in the Subject perl crashes several times during dmake test. It is not
> just a simple test failure but a Windows dialog box appears, saying =
that
> perl.exe has crashed.

Hello, Michael.

In these cases I usually use something like Devel::Trace to find out =
which line(s) of Perl were executing before the dialog pops up.  Output =
will be super verbose, but it's the last ten lines (or so) that really =
matter.

While it's possible to turn on crash dumps and examine them in a =
debugger, I've found this to be generally unhelpful on Windows.  The =
same goes for Windows system call traces.  There's a tool for that, but =
Perl tends to crash in its own code.

Please be sure you're using the latest available versions of POE, =
POE::Component::Resolver, and POE::Component::Client::Keepalive.  The =
PPM build system is often stuck on some earlier version.

It feels like the most problematic part of =
POE::Component::Client::Keepalive's stack would be =
POE::Component::Resolver.  It's all "pure Perl", but the resolver uses =
POE::Wheel::Run to move blocking DNS calls into subprocesses.

POE::Wheel::Run uses Windows-specific modules to avoid problems with =
fork().  Many of these modules are bundled with Perl, but maybe PPM =
and/or CPAN contain newer versions.  As a general recommendation, I =
suppose it wouldn't hurt to make sure these are up to date: =
Win32API::File, Win32::Console, Win32::Process, Win32::Job, and Win32.  =
There may be unmet minimum version requirements for your particular =
setup.

If you get Devel::Trace working, sending me the last output before the =
popup might help.

--=20
Rocco Caputo <[email protected]>