In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/f7bbabd3deb33ca111eb6b17f0252ad07f079f16?hp=8d1c3e263ba02c52927c03abb5de6a47cf4a89f8>

- Log -----------------------------------------------------------------
commit f7bbabd3deb33ca111eb6b17f0252ad07f079f16
Author: Jan Dubois <[email protected]>
Date:   Mon May 11 15:21:27 2009 -0700

    select() generates "Invalid parameter" messages on Windows Vista.
    
    The messages are generated by OutputDebugString() so are only visible
    inside a debugger, or other debugger viewer applications.
    
    The messages are generated by the _get_osfhandle() calls with invalid
    file ids.  This change makes sure it is only called when the corresponding
    bit in the select() arguments has been set.
    
    Related bug reports:
    
        http://bugs.activestate.com/show_bug.cgi?id=82995
        http://bugs.slimdevices.com/show_bug.cgi?id=11896
        http://getpopfile.org/ticket/45
    
    Even with this patch there are still residual "Invalid parameter" messages
    in the debug output while building Perl itself.  They are generated by
    miniperl in the win32_fclose() function, again calling _get_osfhandle()
    with an invalid handle.  The same messages can be observed when Perl
    is built *without* USE_PERLIO (just like miniperl).
-----------------------------------------------------------------------

Summary of changes:
 win32/win32sck.c |   35 ++++++++++++++++++++++++-----------
 1 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/win32/win32sck.c b/win32/win32sck.c
index 2427cb3..7798168 100644
--- a/win32/win32sck.c
+++ b/win32/win32sck.c
@@ -279,13 +279,18 @@ win32_select(int nfds, Perl_fd_set* rd, Perl_fd_set* wr, 
Perl_fd_set* ex, const
     FD_ZERO(&nwr);
     FD_ZERO(&nex);
     for (i = 0; i < nfds; i++) {
-       fd = TO_SOCKET(i);
-       if (rd && PERL_FD_ISSET(i,rd))
+       if (rd && PERL_FD_ISSET(i,rd)) {
+           fd = TO_SOCKET(i);
            FD_SET((unsigned)fd, &nrd);
-       if (wr && PERL_FD_ISSET(i,wr))
+       }
+       if (wr && PERL_FD_ISSET(i,wr)) {
+           fd = TO_SOCKET(i);
            FD_SET((unsigned)fd, &nwr);
-       if (ex && PERL_FD_ISSET(i,ex))
+       }
+       if (ex && PERL_FD_ISSET(i,ex)) {
+           fd = TO_SOCKET(i);
            FD_SET((unsigned)fd, &nex);
+       }
     }
 
     errno = save_errno;
@@ -293,13 +298,21 @@ win32_select(int nfds, Perl_fd_set* rd, Perl_fd_set* wr, 
Perl_fd_set* ex, const
     save_errno = errno;
 
     for (i = 0; i < nfds; i++) {
-       fd = TO_SOCKET(i);
-       if (rd && PERL_FD_ISSET(i,rd) && !FD_ISSET(fd, &nrd))
-           PERL_FD_CLR(i,rd);
-       if (wr && PERL_FD_ISSET(i,wr) && !FD_ISSET(fd, &nwr))
-           PERL_FD_CLR(i,wr);
-       if (ex && PERL_FD_ISSET(i,ex) && !FD_ISSET(fd, &nex))
-           PERL_FD_CLR(i,ex);
+       if (rd && PERL_FD_ISSET(i,rd)) {
+           fd = TO_SOCKET(i);
+           if (!FD_ISSET(fd, &nrd))
+               PERL_FD_CLR(i,rd);
+       }
+       if (wr && PERL_FD_ISSET(i,wr)) {
+           fd = TO_SOCKET(i);
+           if (!FD_ISSET(fd, &nwr))
+               PERL_FD_CLR(i,wr);
+       }
+       if (ex && PERL_FD_ISSET(i,ex)) {
+           fd = TO_SOCKET(i);
+           if (!FD_ISSET(fd, &nex))
+               PERL_FD_CLR(i,ex);
+       }
     }
     errno = save_errno;
 #else

--
Perl5 Master Repository

Reply via email to