if (PQExpBufferBroken(errorMessage)) return; /* already failed */
/* Loop in case we have to retry after enlarging the buffer. */ do
{
errno = save_errno;
va_start(args, fmt);
done = appendPQExpBufferVA(errorMessage, libpq_gettext(fmt), args);
va_end(args);
} while (!done);
/* Block SIGPIPE and save previous mask for later reset */
SOCK_ERRNO_SET(pthread_sigmask(SIG_BLOCK, &sigpipe_sigset, osigset)); if (SOCK_ERRNO) return -1;
/* We can have a pending SIGPIPE only if it was blocked before */ if (sigismember(osigset, SIGPIPE))
{ /* Is there a pending SIGPIPE? */ if (sigpending(&sigset) != 0) return -1;
/* *DiscardanypendingSIGPIPEandresetthesignalmask.Thisisacopyof *libpq'sinternalAPI.
*/ void
pq_reset_sigpipe(sigset_t *osigset, bool sigpipe_pending, bool got_epipe)
{ int save_errno = SOCK_ERRNO; int signo;
sigset_t sigset;
/* Clear SIGPIPE only if none was pending */ if (got_epipe && !sigpipe_pending)
{ if (sigpending(&sigset) == 0 &&
sigismember(&sigset, SIGPIPE))
{
sigset_t sigpipe_sigset;
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.10Bemerkung:
(vorverarbeitet am 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.