From 37ec1aec856d9f941c54a4c316fd341b54f94bdf Mon Sep 17 00:00:00 2001 From: Spider Boardman Date: Sat, 29 Mar 1997 14:06:37 -0500 Subject: [PATCH] C doesn't always restore This is a bug report for perl from spider@Orb.Nashua.NH.US, If you're lucky enough to get a signal (such as ALRM) which is handled with die() while in a SelectSaver->new($fh) call, your previous output filehandle is not restored. It violates the basic rule of 'save and restore' handling, in that it modifies the state it wants to restore I it has ensured that the prior state will be restored. Patch: p5p-msgid: 199703291906.OAA07232@Orb.Nashua.NH.US --- lib/SelectSaver.pm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/SelectSaver.pm b/lib/SelectSaver.pm index 4c764be..5f56922 100644 --- a/lib/SelectSaver.pm +++ b/lib/SelectSaver.pm @@ -38,8 +38,10 @@ use Symbol; sub new { @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]'; - my $fh = (@_ > 1) ? (select qualify($_[1], caller)) : select; - bless [$fh], $_[0]; + my $fh = select; + my $self = bless [$fh], $_[0]; + select qualify($_[1], caller) if @_ > 1; + $self; } sub DESTROY { -- 1.8.3.1