Guys, attached is a patch to fix two memory leaks on start-up. The
first is when freeaddrinfo has been used to free memory allocated by
getaddrinfo2 (so freeaddrinfo2 should be used). The second is 2 leaks
when creating the lock (PostgreSQL and socket) files.
The diff is against last night's CVS HEAD.
L.
diff -cr pgsql.old/src/backend/libpq/pqcomm.c pgsql/src/backend/libpq/pqcomm.c
*** pgsql.old/src/backend/libpq/pqcomm.c 2003-06-12 08:36:51.000000000 +0100
--- pgsql/src/backend/libpq/pqcomm.c 2003-07-21 22:58:39.000000000 +0100
***************
*** 363,369 ****
added++;
}
! freeaddrinfo(addrs);
if (!added)
{
--- 363,369 ----
added++;
}
! freeaddrinfo2(family, addrs);
if (!added)
{
diff -cr pgsql.old/src/backend/utils/init/miscinit.c
pgsql/src/backend/utils/init/miscinit.c
*** pgsql.old/src/backend/utils/init/miscinit.c 2003-06-27 20:08:37.000000000 +0100
--- pgsql/src/backend/utils/init/miscinit.c 2003-07-22 00:08:39.000000000 +0100
***************
*** 842,848 ****
/*
* Arrange for automatic removal of lockfile at proc_exit.
*/
! on_proc_exit(UnlinkLockFile, PointerGetDatum(strdup(filename)));
return true; /* Success! */
}
--- 842,848 ----
/*
* Arrange for automatic removal of lockfile at proc_exit.
*/
! on_proc_exit(UnlinkLockFile, PointerGetDatum(filename));
return true; /* Success! */
}
***************
*** 850,875 ****
bool
CreateDataDirLockFile(const char *datadir, bool amPostmaster)
{
! char lockfile[MAXPGPATH];
!
! snprintf(lockfile, sizeof(lockfile), "%s/postmaster.pid", datadir);
! if (!CreateLockFile(lockfile, amPostmaster, true, datadir))
! return false;
! /* Save name of lockfile for RecordSharedMemoryInLockFile */
! strcpy(directoryLockFile, lockfile);
return true;
}
bool
CreateSocketLockFile(const char *socketfile, bool amPostmaster)
{
! char lockfile[MAXPGPATH];
!
! snprintf(lockfile, sizeof(lockfile), "%s.lock", socketfile);
! if (!CreateLockFile(lockfile, amPostmaster, false, socketfile))
! return false;
! /* Save name of lockfile for TouchSocketLockFile */
! strcpy(socketLockFile, lockfile);
return true;
}
--- 850,873 ----
bool
CreateDataDirLockFile(const char *datadir, bool amPostmaster)
{
! snprintf(directoryLockFile, sizeof(directoryLockFile), "%s/postmaster.pid",
datadir);
! if (!CreateLockFile(directoryLockFile, amPostmaster, true, datadir))
! {
! *directoryLockFile = '\0';
! return false;
! }
return true;
}
bool
CreateSocketLockFile(const char *socketfile, bool amPostmaster)
{
! snprintf(socketLockFile, sizeof(socketLockFile), "%s.lock", socketfile);
! if (!CreateLockFile(socketLockFile, amPostmaster, false, socketfile))
! {
! *socketLockFile = '\0';
! return false;
! }
return true;
}
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend