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 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to