On Tue, Jan 16, 2024 at 9:10 AM Sasmit Utkarsh <utkarshsas...@gmail.com> wrote:
> Hi Merlin et al. > > I have tried to have the above change added in the missing places. Still, > I see the below leaks reported by the address sanitizer. Please see > the attachments for the leak reported and the function definition updated. > Not sure for PQexecPrepared if we call PQclear(res) for cleaning up as > well. let me know if you need any more information > You have many other leaks. See code below, you are making up to thee sequential calls to create a result before calling clear. *All *calls creating and returning returning PGresult have to be cleared before the pointer is reused. merlin LOG_DEBUG("%s() conninfo=%s",__func__,conninfo); if(is_shadow_db) { shadow_db_conn = PQconnectdb(shadow_db_conn_info); if ( PQstatus(shadow_db_conn ) != CONNECTION_OK ) { LOG_ERROR("Connection to shadow database failed! %s", PQerrorMessage(conn)); PQfinish(shadow_db_conn); exit(1); } *res *= PQexec(shadow_db_conn, "SET bytea_output = 'escape'"); LOG_DEBUG("%s() Connection to shadow_shc_data database SUCCESSFUL",__func__); // execute_stored_procedure(shadow_db_conn); } conn = PQconnectdb(conninfo); if ( PQstatus(conn) != CONNECTION_OK ) { LOG_ERROR("Connection to database failed! %s", PQerrorMessage(conn)); PQfinish(conn); exit(1); } else { *res =* PQexec(conn, "SET bytea_output = 'escape'"); LOG_DEBUG("%s() Connection to shc_data database SUCCESSFUL",__func__); } *res *= PQexec(conn, "START TRANSACTION"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { LOG_ERROR("START TRANSACTION failed: %s", PQerrorMessage(conn)); SQL_exit_nicely(conn,res); } PQclear(res);