repost to whole mail list.
2009/10/22 flw <[email protected]>
> Sorry for my english. I am happy to use code instead of English to
> illustrate the problem.
>
> Please note that my patch contains 2 lines of change:
> delete the line 139 of ClientLite.pm.orig, (maybe you have overlooked this
> line)
> and add line 143 of ClientLite.pm
>
> Following is test code:
>
> D:\MoChou>cat bug.pl
> sub foo {
> # ......
> my $DONE = 0;
> eval {
> local $SIG{__DIE__}='DEFAULT';
> local $SIG{__WARN__};
> local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
>
> # ...........
> alarm 3;
> # ........
> $DONE = 1;
> };
>
> if($@)
> {
> alarm 0;
> # ........
> return;
> }
> }
>
> foo();
> print +time, "\n";
> sleep(10);
> print +time, "\n";
>
> D:\MoChou>bug
> 1256143484
> Terminating on signal SIGALRM(14)
>
> D:\MoChou>
>
> 2009/10/20 Philip Gwyn <[email protected]>
>
>
>> On 15-Oct-2009 flw wrote:
>> > Even if there is no defined $@, it also need to alarm(0).
>>
>>
>> Maybe I'm being dense, but I don't see how the eval {} could exit with an
>> alarm
>> still set but $@ not set. Or is there some magic to alarm() and SIG{ALRM}
>> that
>> I'm unaware of.
>>
>> Also, could you write a test case for this?
>>
>> -Philip
>>
>>
>