From b0221080f3f262ec483851913f02fe7df636fb92 Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Sat, 15 Apr 2023 14:53:42 +0100 Subject: [PATCH] ext/pgsql: pg_cancel_query internal update. Removing (obsolete) PGrequestCancel usage in favor of the thread-safe PQcancel/PQfreeCancel pair. --- ext/pgsql/pgsql.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 56b828df7f5ed..9eab234200259 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -3470,12 +3470,22 @@ static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type) PQconsumeInput(pgsql); RETVAL_LONG(PQisBusy(pgsql)); break; - case PHP_PG_ASYNC_REQUEST_CANCEL: - RETVAL_LONG(PQrequestCancel(pgsql)); + case PHP_PG_ASYNC_REQUEST_CANCEL: { + PGcancel *c; + char err[256]; + int rc; + + c = PQgetCancel(pgsql); + RETVAL_LONG((rc = PQcancel(c, err, sizeof(err)))); + if (rc < 0) { + zend_error(E_WARNING, "cannot cancel the query: %s", err); + } while ((pgsql_result = PQgetResult(pgsql))) { PQclear(pgsql_result); } + PQfreeCancel(c); break; + } EMPTY_SWITCH_DEFAULT_CASE() } if (PQsetnonblocking(pgsql, 0)) {