• Vladislav Vaintroub's avatar
    Bug#47571: idle named pipe connection is unkillable · e0800807
    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.
    
    
    include/violite.h:
      Add pipe_overlapped to Vio structure for async IO for named pipes.
    sql-common/client.c:
      Use asynchronous pipe IO.
    sql/mysqld.cc:
      Use asynchronous pipe IO.
    vio/vio.c:
      -Refactor timeouts for win32 protocols: shared memory and named pipes.
      Store read/write timeout in VIO structure, instead of storing pointer
      to NET. New function vio_win32_timeout called indirectly via 
      vio_timeout changes these values.
    vio/vio_priv.h:
      Remove vio_ignore_timeout.
      Add vio_win32_timeout to be used for named pipes and shared memory.
    vio/viosocket.c:
      Use async IO for named pipes.
      After issuing IO, wait for either IO completion, pipe_close_event
      or timeout.
              
      Refactor timeouts for named pipe and shared memory.
    e0800807
violite.h 8.13 KB