vsespb has asked for the wisdom of the Perl Monks concerning the following question:

Hello.

Recently I found a problem, looks like perl bug, posted here: RT#122112 (proof of concept code attached).
In short: "refcnt: fd -1 < 0" assertion triggered.
But this is just bug report, and I need to find workaround for old/current perl versions (bug reproducible in 5.12-5.20).

It seems that any workflow like that:

eval { local $SIG{ALRM}=sub{die}; alarm 10; # fork child # exec in child (exec made in child to separate exec failures from p +rogram exit code) };
_might_ be affected, when ALARM triggered. currently this happening in MIME::Lite for us (related code).

Searching for possible solution to execute external program, with ALRM timeout, without risk running into this.

Replies are listed 'Best First'.
Re: Working around refcnt assertion failure in perl
by Corion (Patriarch) on Jun 19, 2014 at 09:38 UTC

    The only idea that I have would be to decouple mail sending from the rest of your program. Write the mail into a database or a file, and then later have a job go through and send these mails, potentially with a more lenient timeout and without fork+exec involved.