From e5da1bf67e412cb993121063bdf607a4ed6b5731 Mon Sep 17 00:00:00 2001 From: "Stephen R. van den Berg" <srb@cuci.nl> Date: Thu, 17 May 2018 09:25:11 +0200 Subject: [PATCH] pgsql: Return data even after the local backend has died. --- lib/modules/Sql.pmod/pgsql_util.pmod | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index 6a462f4b59..2488dc1dde 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -1497,6 +1497,11 @@ class sql_result { return local_backend->call_out(gottimeout, timeout); } + inline void scuttletimeout(array cid) { + if (local_backend) + local_backend->remove_call_out(cid); + } + //! @returns //! One result row at a time. //! @@ -1515,7 +1520,7 @@ class sql_result { PD("%O Block for datarow\n", _portalname); array cid = setuptimeout(); PT(datarow = datarows->read()); - local_backend->remove_call_out(cid); + scuttletimeout(cid); if (arrayp(datarow)) return datarow; } @@ -1542,7 +1547,7 @@ class sql_result { if (!sizeof(datarow)) { array cid = setuptimeout(); PT(datarow = datarows->read_array()); - local_backend->remove_call_out(cid); + scuttletimeout(cid); } replenishrows(); if (arrayp(datarow[-1])) @@ -1585,7 +1590,7 @@ class sql_result { for (;;) { array cid = setuptimeout(); PT(datarow = datarows->read()); - local_backend->remove_call_out(cid); + scuttletimeout(cid); if (!arrayp(datarow)) break; callout(callback, 0, this, datarow, @args); @@ -1614,7 +1619,7 @@ class sql_result { for (;;) { array cid = setuptimeout(); PT(datarow = datarows->read_array()); - local_backend->remove_call_out(cid); + scuttletimeout(cid); if (!datarow || !arrayp(datarow[-1])) break; callout(callback, 0, this, datarow, @args); -- GitLab