diff --git a/include/utils/BackupHelpers.h b/include/utils/BackupHelpers.h
index 759a0cc..b1f5045 100644
--- a/include/utils/BackupHelpers.h
+++ b/include/utils/BackupHelpers.h
@@ -137,6 +137,7 @@
 
 private:
     void* m_buf;
+    bool m_loggedUnknownMetadata;
     KeyedVector<String8,FileRec> m_files;
 };
 
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;
 }
 
