diff --git a/libs/utils/BackupHelpers.cpp b/libs/utils/BackupHelpers.cpp
index b309dbf..99a4abc 100644
--- a/libs/utils/BackupHelpers.cpp
+++ b/libs/utils/BackupHelpers.cpp
@@ -68,15 +68,6 @@
 
 const static int CURRENT_METADATA_VERSION = 1;
 
-// auto-free buffer management object
-class StAutoFree {
-public:
-    StAutoFree(void* buffer) { mBuf = buffer; }
-    ~StAutoFree() { free(mBuf); }
-private:
-    void* mBuf;
-};
-
 #if 1 // TEST_BACKUP_HELPERS
 #define LOGP(f, x...) printf(f "\n", x)
 #else
@@ -230,8 +221,6 @@
     file_metadata_v1 metadata;
 
     char* buf = (char*)malloc(bufsize);
-    StAutoFree _autoFree(buf);
-
     int crc = crc32(0L, Z_NULL, 0);
 
 
@@ -245,6 +234,7 @@
     bytesLeft = fileSize + sizeof(metadata);
     err = dataStream->WriteEntityHeader(key, bytesLeft);
     if (err != 0) {
+        free(buf);
         return err;
     }
 
@@ -254,6 +244,7 @@
     metadata.undefined_1 = metadata.undefined_2 = 0;
     err = dataStream->WriteEntityData(&metadata, sizeof(metadata));
     if (err != 0) {
+        free(buf);
         return err;
     }
     bytesLeft -= sizeof(metadata); // bytesLeft should == fileSize now
@@ -266,6 +257,7 @@
         }
         err = dataStream->WriteEntityData(buf, amt);
         if (err != 0) {
+            free(buf);
             return err;
         }
     }
@@ -279,6 +271,7 @@
                 bytesLeft -= amt;
                 err = dataStream->WriteEntityData(buf, amt);
                 if (err != 0) {
+                    free(buf);
                     return err;
                 }
             }
@@ -287,6 +280,7 @@
                 " You aren't doing proper locking!", realFilename, fileSize, fileSize-bytesLeft);
     }
 
+    free(buf);
     return NO_ERROR;
 }
 
@@ -318,8 +312,6 @@
     int amt;
 
     char* buf = (char*)malloc(bufsize);
-    StAutoFree _autoFree(buf);
-
     int crc = crc32(0L, Z_NULL, 0);
 
     lseek(fd, 0, SEEK_SET);
@@ -328,6 +320,7 @@
         crc = crc32(crc, (Bytef*)buf, amt);
     }
 
+    free(buf);
     return crc;
 }
 
@@ -451,6 +444,7 @@
 RestoreHelperBase::RestoreHelperBase()
 {
     m_buf = malloc(RESTORE_BUF_SIZE);
+    m_loggedUnknownMetadata = false;
 }
 
 RestoreHelperBase::~RestoreHelperBase()
@@ -489,8 +483,11 @@
     metadata.version = fromlel(metadata.version);
     metadata.mode = fromlel(metadata.mode);
     if (metadata.version > CURRENT_METADATA_VERSION) {
-        LOGW("Restoring file with unsupported metadata version %d (currently %d)",
-                metadata.version, CURRENT_METADATA_VERSION);
+        if (!m_loggedUnknownMetadata) {
+            m_loggedUnknownMetadata = true;
+            LOGW("Restoring file with unsupported metadata version %d (currently %d)",
+                    metadata.version, CURRENT_METADATA_VERSION);
+        }
     }
     mode = metadata.mode;
 
@@ -587,7 +584,6 @@
         fprintf(stderr, "malloc(%d) failed\n", len);
         return ENOMEM;
     }
-    StAutoFree _autoFree(contents);
 
     bool sizesMatch = true;
     amt = lseek(fd, 0, SEEK_END);
@@ -614,6 +610,7 @@
         }
     }
 
+    free(contents);
     return contentsMatch && sizesMatch ? 0 : 1;
 }
 
@@ -919,7 +916,6 @@
     int err;
     int bufSize = strlen(str)+1;
     char* buf = (char*)malloc(bufSize);
-    StAutoFree _autoFree(buf);
     String8 string;
     int cookie = 0x11111111;
     size_t actualSize;
@@ -981,6 +977,7 @@
     if (err != NO_ERROR) {
         fprintf(stderr, "test_read_header_and_entity failed with %s\n", strerror(err));
     }
+    free(buf);
     return err;
 }
 
