changeset 481:cead91ecf9a2 memory-leaks

added file descriptor close() in lshlib.cpp
author mas01mc
date Sat, 10 Jan 2009 13:23:01 +0000
parents d7c23fcc8e2a
children bf54b8fa7d89
files lshlib.cpp
diffstat 1 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lshlib.cpp	Sat Jan 10 13:18:24 2009 +0000
+++ b/lshlib.cpp	Sat Jan 10 13:23:01 2009 +0000
@@ -472,6 +472,7 @@
   calling_instance(0),
   add_point_callback(0)
 {
+  FILE* dbFile = 0;
   int dbfid = unserialize_lsh_header(filename);
   indexName = new char[O2_INDEX_MAXSTR];
   strncpy(indexName, filename, O2_INDEX_MAXSTR); // COPY THE CONTENTS TO THE NEW POINTER
@@ -485,12 +486,16 @@
 
   // Format2 always needs unserializing
   if(lshHeader->flags&O2_SERIAL_FILEFORMAT2 && lshInCoreFlag){
-    FILE* dbFile = fdopen(dbfid, "rb");
+    dbFile = fdopen(dbfid, "rb");
     if(!dbFile)
       error("Cannot open LSH file for reading", filename);
     unserialize_lsh_hashtables_format2(dbFile);
   }
   serial_close(dbfid);
+  if(dbFile){
+    fclose(dbFile);
+    dbFile = 0;
+  }
 }
 
 G::~G(){
@@ -680,7 +685,7 @@
   int dbfid;
   char* db;
   int dbIsNew=0;
-
+  FILE* dbFile = 0;
   // Check requested serialFormat
   if(!(serialFormat==O2_SERIAL_FILEFORMAT1 || serialFormat==O2_SERIAL_FILEFORMAT2))
     error("Unrecognized serial file format request: ", "serialize()");
@@ -717,7 +722,7 @@
   if(serialFormat == O2_SERIAL_FILEFORMAT1)
     serialize_lsh_hashtables_format1(dbfid, !dbIsNew);
   else{
-    FILE* dbFile = fdopen(dbfid, "r+b");
+    dbFile = fdopen(dbfid, "r+b");
     if(!dbFile)
       error("Cannot open LSH file for writing",filename);
     serialize_lsh_hashtables_format2(dbFile, !dbIsNew);
@@ -736,6 +741,10 @@
     serial_munmap(db, O2_SERIAL_HEADER_SIZE); // drop mmap
   }  
     serial_close(dbfid);
+    if(dbFile){
+      fclose(dbFile);
+      dbFile = 0;
+    }
 }
 
 // Test to see if core structure and requested format is