Plugged a couple of memory leaks.
[doldaconnect.git] / daemon / client.c
index 26b50f3..e493a88 100644 (file)
@@ -294,8 +294,10 @@ static void readhashcache(void)
     if((stream = fopen(hcname, "r")) == NULL)
     {
        flog(LOG_WARNING, "could not open hash cache %s: %s", hcname, strerror(errno));
+       free(hcname);
        return;
     }
+    free(hcname);
     while(hashcache != NULL)
        freehashcache(hashcache);
     line = 0;
@@ -369,8 +371,10 @@ static void writehashcache(int now)
     if((stream = fopen(hcname, "w")) == NULL)
     {
        flog(LOG_WARNING, "could not write hash cache %s: %s", hcname, strerror(errno));
+       free(hcname);
        return;
     }
+    free(hcname);
     fprintf(stream, "# Dolda Connect hash cache file\n");
     fprintf(stream, "# Generated automatically, do not edit\n");
     fprintf(stream, "# Format: DEVICE INODE MTIME [HASH...]\n");
@@ -1086,6 +1090,8 @@ static void terminate(void)
 {
     if(hashjob != 0)
        kill(hashjob, SIGHUP);
+    if(hashwritetimer != NULL)
+       writehashcache(1);
     while(shares != NULL)
        freesharepoint(shares);
     freecache(shareroot);