• Vladislav Vaintroub's avatar
    Bug#47571: idle named pipe connection is unkillable · 84301e8b
    Vladislav Vaintroub authored
    Bug#31621: Windows server hanging during shutdown using named pipes 
               and idle connection
                
    Problem: when idle pipe connection is forcefully closed with KILL
    statement or when the server goes down, thread that is closing connection
    would hang infinitely in CloseHandle(). The reason for the hang is that 
    named pipe operations are performed synchronously. In this mode all IOs
    on pipe are serialized, that is CloseHandle() will not abort ReadFile() 
    in another thread, but wait for ReadFile() to complete.
                
    The fix implements asynchrnous mode for named pipes, where operation of file
    are not synchronized. Read/Write operation would fire an async IO and wait for
    either IO completion or timeout.
                
    Note, that with this patch timeouts are properly handled for named pipes.
          
    Post-review: Win32 timeout code has been fixed for named pipes and shared
    memory. We do not store pointer to NET in vio structure, only the read and 
    write timeouts.
    84301e8b
client.c 96.2 KB