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