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:
parent
02c408e21a
commit
5faef9d582
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -3492,8 +3492,7 @@ error_return:
|
|||
|
||||
free(view_def);
|
||||
|
||||
if (res)
|
||||
PQclear(res);
|
||||
PQclear(res);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 ||
|
||||
|
|
Loading…
Reference in New Issue