Hello!

On Tue, Sep 06, 2022 at 05:52:51PM +0400, Sergey Kandaurov wrote:

> # HG changeset patch
> # User Sergey Kandaurov <pluk...@nginx.com>
> # Date 1662472340 -14400
> #      Tue Sep 06 17:52:20 2022 +0400
> # Node ID 7eb87eaf06f4b9161cfe298f195947dbddedd01d
> # Parent  78fe648d54a79822a72f3a5f8cc79651b3b1f5a7
> Tests: fixed try_run() to remove temporary directory on failure.
> 
> Keeping the file handle pointing to the "stderr" file prevented removal
> of the temporary directory on win32 if execution aborted in run().
> The fix is to move safe file operations surrounding run() out of the
> eval block such that the state of file handles is consistent.
> Fixes a1874249496d.

I believe it might need some additional emphasis that this is 
about Windows only.  For example:

Tests: fixed try_run() to remove temporary directory on win32.

> 
> diff -r 78fe648d54a7 -r 7eb87eaf06f4 lib/Test/Nginx.pm
> --- a/lib/Test/Nginx.pm       Tue Aug 30 17:24:16 2022 +0400
> +++ b/lib/Test/Nginx.pm       Tue Sep 06 17:52:20 2022 +0400
> @@ -290,8 +290,9 @@ sub has_daemon($) {
>  sub try_run($$) {
>       my ($self, $message) = @_;
>  
> +     open OLDERR, ">&", \*STDERR;
> +
>       eval {
> -             open OLDERR, ">&", \*STDERR;
>               open NEWERR, ">", $self->{_testdir} . '/stderr'
>                       or die "Can't open stderr: $!";
>               close STDERR;
> @@ -299,10 +300,10 @@ sub try_run($$) {
>               close NEWERR;
>  
>               $self->run();
> +     };
>  
> -             close STDERR;
> -             open STDERR, ">&", \*OLDERR;
> -     };
> +     close STDERR;
> +     open STDERR, ">&", \*OLDERR;
>  
>       return $self unless $@;

Wouldn't it be better to move all stderr handling out of the eval?

diff --git a/lib/Test/Nginx.pm b/lib/Test/Nginx.pm
--- a/lib/Test/Nginx.pm
+++ b/lib/Test/Nginx.pm
@@ -291,14 +291,13 @@ sub try_run($$) {
        my ($self, $message) = @_;
 
        open OLDERR, ">&", \*STDERR;
+       open NEWERR, ">", $self->{_testdir} . '/stderr'
+               or die "Can't open stderr: $!";
+       close STDERR;
+       open STDERR, ">&", \*NEWERR;
+       close NEWERR;
 
        eval {
-               open NEWERR, ">", $self->{_testdir} . '/stderr'
-                       or die "Can't open stderr: $!";
-               close STDERR;
-               open STDERR, ">&", \*NEWERR;
-               close NEWERR;
-
                $self->run();
        };
 

Alternatively, it might be the right time to backout a1874249496d 
completely and rely on "-e ..." instead, given that it was 
introduced in 1.19.5 and already present in all supported 
versions.

-- 
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-devel mailing list -- nginx-devel@nginx.org
To unsubscribe send an email to nginx-devel-le...@nginx.org

Reply via email to