• Tom Lane's avatar
    Clean up thread management in parallel pg_dump for Windows. · 807b4537
    Tom Lane authored
    Since we start the worker threads with _beginthreadex(), we should use
    _endthreadex() to terminate them.  We got this right in the normal-exit
    code path, but not so much during an error exit from a worker.
    In addition, be sure to apply CloseHandle to the thread handle after
    each thread exits.
    
    It's not clear that these oversights cause any user-visible problems,
    since the pg_dump run is about to terminate anyway.  Still, it's clearly
    better to follow Microsoft's API specifications than ignore them.
    
    Also a few cosmetic cleanups in WaitForTerminatingWorkers(), including
    being a bit less random about where to cast between uintptr_t and HANDLE,
    and being sure to clear the worker identity field for each dead worker
    (not that false matches should be possible later, but let's be careful).
    
    Original observation and patch by Armin Schöffmann, cosmetic improvements
    by Michael Paquier and me.  (Armin's patch also included closing sockets
    in ShutdownWorkersHard(), but that's been dealt with already in commit
    df8d2d8c.)  Back-patch to 9.3 where parallel pg_dump was introduced.
    
    Discussion: <zarafa.570306bd.3418.074bf1420d8f2ba2@root.aegaeon.de>
    807b4537
pg_backup_utils.c 4.05 KB