• Tom Lane's avatar
    Avoid lockup of a parallel worker when reporting a long error message. · be4b0c00
    Tom Lane authored
    Because sigsetjmp() will restore the initial state with signals blocked,
    the code path in bgworker.c for reporting an error and exiting would
    execute that way.  Usually this is fairly harmless; but if a parallel
    worker had an error message exceeding the shared-memory communication
    buffer size (16K) it would lock up, because it would wait for a
    resume-sending signal from its parallel leader which it would never
    detect.
    
    To fix, just unblock signals at the appropriate point.
    
    This can be shown to fail back to 9.6.  The lack of parallel query
    infrastructure makes it difficult to provide a simple test case for
    9.5; but I'm pretty sure the issue exists in some form there as well,
    so apply the code change there too.
    
    Vignesh C, reviewed by Bharath Rupireddy, Robert Haas, and myself
    
    Discussion: https://postgr.es/m/CALDaNm1d1hHPZUg3xU4XjtWBOLCrA+-2cJcLpw-cePZ=GgDVfA@mail.gmail.com
    be4b0c00
select_parallel.out 55.6 KB