Jan Wieck wieck at lists.slony.info
Tue Dec 22 09:10:13 PST 2009
Update of /home/cvsd/slony1/slony1-engine/src/slon
In directory main.slony.info:/tmp/cvs-serv13385/src/slon

Modified Files:
      Tag: REL_1_2_STABLE
	cleanup_thread.c remote_listen.c 
Log Message:
Fixing a memory leak in cleanup thread. It left an orphaned
PG result behind every time it switched to/from LISTENing.

Correct some code formatting.


Jan


Index: remote_listen.c
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/src/slon/remote_listen.c,v
retrieving revision 1.31.2.4
retrieving revision 1.31.2.5
diff -C2 -d -r1.31.2.4 -r1.31.2.5
*** remote_listen.c	17 Aug 2009 17:39:57 -0000	1.31.2.4
--- remote_listen.c	22 Dec 2009 17:10:10 -0000	1.31.2.5
***************
*** 279,282 ****
--- 279,284 ----
  				continue;
  			}
+ 			PQclear(res);
+ 
  			rc = db_getLocalNodeId(dbconn);
  			if (rc != node->no_id)
***************
*** 319,323 ****
  					 "remoteListenThread_%d: connected to '%s'\n",
  					 node->no_id, conn_conninfo);
- 
  		}
  
--- 321,324 ----
***************
*** 374,377 ****
--- 375,379 ----
  				continue;
  			}
+ 			PQclear(res);
  		}
  

Index: cleanup_thread.c
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/src/slon/cleanup_thread.c,v
retrieving revision 1.33.2.7
retrieving revision 1.33.2.8
diff -C2 -d -r1.33.2.7 -r1.33.2.8
*** cleanup_thread.c	9 Dec 2009 20:49:20 -0000	1.33.2.7
--- cleanup_thread.c	22 Dec 2009 17:10:10 -0000	1.33.2.8
***************
*** 46,50 ****
  	"%s.sl_log_2",
  	"%s.sl_seqlog",
!         "%s.sl_archive_counter",
  	"pg_catalog.pg_listener",
  	"pg_catalog.pg_statistic",
--- 46,50 ----
  	"%s.sl_log_2",
  	"%s.sl_seqlog",
! 	"%s.sl_archive_counter",
  	"pg_catalog.pg_listener",
  	"pg_catalog.pg_statistic",
***************
*** 254,267 ****
  				slon_mkquery(&query3, "show autovacuum");
  				res = PQexec(dbconn, dstring_data(&query3));
! 				if (PQresultStatus(res)  != PGRES_TUPLES_OK)
  				{
  					slon_log(SLON_ERROR,
!                                                          "cleanupThread: \"%s\" - %s",
!                                                    dstring_data(&query3), PQresultErrorMessage(res));
  
!                                         /*
!                                          * slon_retry(); break;
!                                          */
!                                 }
  				else if (strncmp(PQgetvalue(res, 0, 0), "on", 2) == 0)
  				{
--- 254,267 ----
  				slon_mkquery(&query3, "show autovacuum");
  				res = PQexec(dbconn, dstring_data(&query3));
! 				if (PQresultStatus(res) != PGRES_TUPLES_OK)
  				{
  					slon_log(SLON_ERROR,
! 							"cleanupThread: \"%s\" - %s",
! 							dstring_data(&query3), PQresultErrorMessage(res));
  
! 					/*
! 					 * slon_retry(); break;
! 					 */
! 				}
  				else if (strncmp(PQgetvalue(res, 0, 0), "on", 2) == 0)
  				{
***************
*** 271,275 ****
  					a_vac=1;
  				}
!                                 PQclear(res);
  				dstring_reset(&query3);
  			}
--- 271,275 ----
  					a_vac=1;
  				}
! 				PQclear(res);
  				dstring_reset(&query3);
  			}
***************
*** 299,321 ****
  			for (t = 0; table_list[t] != NULL ; t++)
  			{
- 
  				sprintf(tstring, table_list[t], rtcfg_namespace);
  				if (a_vac==1)
  				{
  					if (conn->pg_version < 80400) {
! 						slon_mkquery(&query3,"select (case when pga.enabled ISNULL THEN true ELSE pga.enabled END) "
! 									 "from \"pg_catalog\".pg_namespace PGN, \"pg_catalog\".pg_class PGC LEFT OUTER JOIN "
! 									 "\"pg_catalog\".pg_autovacuum pga ON (PGC.oid = pga.vacrelid) where PGC.relnamespace = PGN.oid "
! 									 "and %s.slon_quote_input('%s')=%s.slon_quote_brute(PGN.nspname) || '.' || %s.slon_quote_brute(PGC.relname);",
! 									 rtcfg_namespace,tstring, rtcfg_namespace, rtcfg_namespace);
! 
  					} else {
  						/* PostgreSQL 8.4 */
  						slon_mkquery (&query3, 
! 									  "select coalesce ('autovacuum_enabled=on' = any(reloptions), 't'::boolean) "
! 									  "from \"pg_catalog\".pg_class pgc, \"pg_catalog\".pg_namespace pgn "
! 									  "where pgc.relnamespace = pgn.oid and %s.slon_quote_input('%s')= "
! 									  " %s.slon_quote_brute(PGN.nspname) || '.' || %s.slon_quote_brute(PGC.relname);",
! 									  rtcfg_namespace,tstring, rtcfg_namespace, rtcfg_namespace);
  					}
  
--- 299,332 ----
  			for (t = 0; table_list[t] != NULL ; t++)
  			{
  				sprintf(tstring, table_list[t], rtcfg_namespace);
  				if (a_vac==1)
  				{
  					if (conn->pg_version < 80400) {
! 						slon_mkquery(&query3,
! 								"select (case when pga.enabled ISNULL "
! 								"THEN true ELSE pga.enabled END) "
! 								"from \"pg_catalog\".pg_namespace PGN, "
! 								"\"pg_catalog\".pg_class PGC LEFT OUTER JOIN "
! 								"\"pg_catalog\".pg_autovacuum pga ON "
! 								"(PGC.oid = pga.vacrelid) "
! 								"where PGC.relnamespace = PGN.oid "
! 								"and %s.slon_quote_input('%s')="
! 								"%s.slon_quote_brute(PGN.nspname) || '.' "
! 								"|| %s.slon_quote_brute(PGC.relname);",
! 								rtcfg_namespace, tstring, rtcfg_namespace, 
! 								rtcfg_namespace);
  					} else {
  						/* PostgreSQL 8.4 */
  						slon_mkquery (&query3, 
! 								"select coalesce ('autovacuum_enabled=on' "
! 								"= any(reloptions), 't'::boolean) "
! 								"from \"pg_catalog\".pg_class pgc, "
! 								"\"pg_catalog\".pg_namespace pgn "
! 								"where pgc.relnamespace = pgn.oid "
! 								"and %s.slon_quote_input('%s')= "
! 								" %s.slon_quote_brute(PGN.nspname) || '.' "
! 								"|| %s.slon_quote_brute(PGC.relname);",
! 								rtcfg_namespace, tstring, rtcfg_namespace, 
! 								rtcfg_namespace);
  					}
  
***************
*** 324,329 ****
  					{
  						slon_log(SLON_ERROR,
! 							 "cleanupThread: \"%s\" - %s",
! 							   dstring_data(&query3), PQresultErrorMessage(res));
  						/*
  						 * slon_retry(); break;
--- 335,341 ----
  					{
  						slon_log(SLON_ERROR,
! 								"cleanupThread: \"%s\" - %s",
! 								dstring_data(&query3), 
! 								PQresultErrorMessage(res));
  						/*
  						 * slon_retry(); break;
***************
*** 338,342 ****
  								/* 
  								 * pg_avac is NOT enabled for this table
! 								 * so this means we need to handel it internaly
  								 */
  								if (vac_enable == vac_frequency)
--- 350,354 ----
  								/* 
  								 * pg_avac is NOT enabled for this table
! 								 * so this means we need to handle it internaly
  								 */
  								if (vac_enable == vac_frequency)
***************
*** 358,369 ****
  				res = PQexec(dbconn, dstring_data(&query3));
  				if (PQresultStatus(res) != PGRES_COMMAND_OK)  /* query error */
!                                 {
!                  	                slon_log(SLON_ERROR,
! 	                                        "cleanupThread: \"%s\" - %s",
!                                                 dstring_data(&query3), PQresultErrorMessage(res));
!                                                 /*
!                                                  * slon_retry(); break;
!                                                  */                  
!                                 }
  				PQclear(res);
  				dstring_reset(&query3);
--- 370,381 ----
  				res = PQexec(dbconn, dstring_data(&query3));
  				if (PQresultStatus(res) != PGRES_COMMAND_OK)  /* query error */
! 				{
! 					slon_log(SLON_ERROR,
! 							"cleanupThread: \"%s\" - %s",
! 							dstring_data(&query3), PQresultErrorMessage(res));
! 					/*
! 					 * slon_retry(); break;
! 					 */
! 				}
  				PQclear(res);
  				dstring_reset(&query3);
***************
*** 371,376 ****
  			gettimeofday(&tv_end, NULL);
  			slon_log(SLON_DEBUG2,
! 					 "cleanupThread: %8.3f seconds for vacuuming\n",
! 					 TIMEVAL_DIFF(&tv_start, &tv_end));
  
  			/*
--- 383,388 ----
  			gettimeofday(&tv_end, NULL);
  			slon_log(SLON_DEBUG2,
! 					"cleanupThread: %8.3f seconds for vacuuming\n",
! 					TIMEVAL_DIFF(&tv_start, &tv_end));
  
  			/*
***************
*** 378,382 ****
  			 */
  			dstring_free(&query3);
- 
  		}
  	}
--- 390,393 ----



More information about the Slony1-commit mailing list