Remove redundant null pointer checks before PQclear and PQconninfoFree

These functions already had the free()-like behavior of handling null
pointers as a no-op.  But it wasn't documented, so add it explicitly
to the documentation, too.

Discussion: https://www.postgresql.org/message-id/flat/dac5d2d0-98f5-94d9-8e69-46da2413593d%40enterprisedb.com
This commit is contained in:
Peter Eisentraut 2022-07-03 20:11:05 +02:00
parent 02c408e21a
commit 5faef9d582
13 changed files with 29 additions and 48 deletions

View File

@ -157,8 +157,7 @@ dblink_res_internalerror(PGconn *conn, PGresult *res, const char *p2)
{
char *msg = pchomp(PQerrorMessage(conn));
if (res)
PQclear(res);
PQclear(res);
elog(ERROR, "%s: %s", p2, msg);
}
@ -2756,8 +2755,7 @@ dblink_res_error(PGconn *conn, const char *conname, PGresult *res,
* leaking all the strings too, but those are in palloc'd memory that will
* get cleaned up eventually.
*/
if (res)
PQclear(res);
PQclear(res);
/*
* Format the basic errcontext string. Below, we'll add on something

View File

@ -2790,8 +2790,7 @@ postgresEndDirectModify(ForeignScanState *node)
return;
/* Release PGresult */
if (dmstate->result)
PQclear(dmstate->result);
PQclear(dmstate->result);
/* Release remote connection */
ReleaseConnection(dmstate->conn);
@ -3604,8 +3603,7 @@ get_remote_estimate(const char *sql, PGconn *conn,
}
PG_FINALLY();
{
if (res)
PQclear(res);
PQclear(res);
}
PG_END_TRY();
}
@ -3853,8 +3851,7 @@ fetch_more_data(ForeignScanState *node)
}
PG_FINALLY();
{
if (res)
PQclear(res);
PQclear(res);
}
PG_END_TRY();
@ -4338,8 +4335,7 @@ store_returning_result(PgFdwModifyState *fmstate,
}
PG_CATCH();
{
if (res)
PQclear(res);
PQclear(res);
PG_RE_THROW();
}
PG_END_TRY();
@ -4627,8 +4623,7 @@ get_returning_data(ForeignScanState *node)
}
PG_CATCH();
{
if (dmstate->result)
PQclear(dmstate->result);
PQclear(dmstate->result);
PG_RE_THROW();
}
PG_END_TRY();
@ -4957,8 +4952,7 @@ postgresAnalyzeForeignTable(Relation relation,
}
PG_FINALLY();
{
if (res)
PQclear(res);
PQclear(res);
}
PG_END_TRY();
@ -5114,8 +5108,7 @@ postgresAcquireSampleRowsFunc(Relation relation, int elevel,
}
PG_CATCH();
{
if (res)
PQclear(res);
PQclear(res);
PG_RE_THROW();
}
PG_END_TRY();
@ -5496,8 +5489,7 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid)
}
PG_FINALLY();
{
if (res)
PQclear(res);
PQclear(res);
}
PG_END_TRY();

View File

@ -3628,6 +3628,9 @@ char *PQresultErrorField(const PGresult *res, int fieldcode);
<synopsis>
void PQclear(PGresult *res);
</synopsis>
If the argument is a <symbol>NULL</symbol> pointer, no operation is
performed.
</para>
<para>
@ -6670,6 +6673,8 @@ void PQfreemem(void *ptr);
<synopsis>
void PQconninfoFree(PQconninfoOption *connOptions);
</synopsis>
If the argument is a <symbol>NULL</symbol> pointer, no operation is
performed.
</para>
<para>

View File

@ -197,16 +197,14 @@ GetConnection(void)
PQfinish(tmpconn);
free(values);
free(keywords);
if (conn_opts)
PQconninfoFree(conn_opts);
PQconninfoFree(conn_opts);
return NULL;
}
/* Connection ok! */
free(values);
free(keywords);
if (conn_opts)
PQconninfoFree(conn_opts);
PQconninfoFree(conn_opts);
/*
* Set always-secure search path, so malicious users can't get control.

View File

@ -1502,8 +1502,7 @@ connectDatabase(const char *dbname, const char *connection_string,
free(keywords);
free(values);
if (conn_opts)
PQconninfoFree(conn_opts);
PQconninfoFree(conn_opts);
/*
* Merge the connection info inputs given in form of connection string

View File

@ -3476,8 +3476,7 @@ do_connect(enum trivalue reuse_previous_specification,
/* Release locally allocated data, whether we succeeded or not */
pg_free(password);
if (cinfo)
PQconninfoFree(cinfo);
PQconninfoFree(cinfo);
if (!success)
{

View File

@ -463,8 +463,7 @@ ClearOrSaveResult(PGresult *result)
{
case PGRES_NONFATAL_ERROR:
case PGRES_FATAL_ERROR:
if (pset.last_error_result)
PQclear(pset.last_error_result);
PQclear(pset.last_error_result);
pset.last_error_result = result;
break;

View File

@ -3492,8 +3492,7 @@ error_return:
free(view_def);
if (res)
PQclear(res);
PQclear(res);
return retval;
}

View File

@ -85,8 +85,7 @@ executeMaintenanceCommand(PGconn *conn, const char *query, bool echo)
r = (res && PQresultStatus(res) == PGRES_COMMAND_OK);
if (res)
PQclear(res);
PQclear(res);
return r;
}

View File

@ -923,8 +923,7 @@ ECPGdescribe(int line, int compat, bool input, const char *connection_name, cons
if (!ecpg_check_PQresult(res, line, con->connection, compat))
break;
if (desc->result != NULL)
PQclear(desc->result);
PQclear(desc->result);
desc->result = res;
ret = true;

View File

@ -1714,8 +1714,7 @@ ecpg_process_output(struct statement *stmt, bool clear_result)
status = false;
else
{
if (desc->result)
PQclear(desc->result);
PQclear(desc->result);
desc->result = stmt->results;
clear_result = false;
ecpg_log("ecpg_process_output on line %d: putting result (%d tuples) into descriptor %s\n",

View File

@ -3766,8 +3766,7 @@ keep_going: /* We will come back to here until there is
}
/* Something went wrong with "SHOW transaction_read_only". */
if (res)
PQclear(res);
PQclear(res);
/* Append error report to conn->errorMessage. */
appendPQExpBuffer(&conn->errorMessage,
@ -3818,8 +3817,7 @@ keep_going: /* We will come back to here until there is
}
/* Something went wrong with "SELECT pg_is_in_recovery()". */
if (res)
PQclear(res);
PQclear(res);
/* Append error report to conn->errorMessage. */
appendPQExpBuffer(&conn->errorMessage,

View File

@ -775,12 +775,10 @@ PQclear(PGresult *res)
void
pqClearAsyncResult(PGconn *conn)
{
if (conn->result)
PQclear(conn->result);
PQclear(conn->result);
conn->result = NULL;
conn->error_result = false;
if (conn->next_result)
PQclear(conn->next_result);
PQclear(conn->next_result);
conn->next_result = NULL;
}
@ -2437,8 +2435,7 @@ PQexecFinish(PGconn *conn)
lastResult = NULL;
while ((result = PQgetResult(conn)) != NULL)
{
if (lastResult)
PQclear(lastResult);
PQclear(lastResult);
lastResult = result;
if (result->resultStatus == PGRES_COPY_IN ||
result->resultStatus == PGRES_COPY_OUT ||