Fixed memory leak when enumerating entries
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 12 Oct 2008 01:48:06 +0000 (22:48 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 12 Oct 2008 04:27:23 +0000 (01:27 -0300)
src/backend.c

index 5bcbb42..7fe3beb 100644 (file)
@@ -89,15 +89,32 @@ atom_backend_enumerate_entries (AtomCtx *ctx, char *** reqs,
   char **rreqs = NULL;
   AtomEntry **rentries = NULL;
   size_t rlen = 0;
+  int i;
   backend = atom_backend (ctx);
   if (backend && backend->enumerate_entries)
     {
       backend->enumerate_entries (ctx, &rreqs, &rentries, &rlen);
     }
   if (reqs)
-    *reqs = rreqs;
+    {
+      *reqs = rreqs;
+    }
+  else
+    {
+      for (i = 0; i < rlen; i++)
+        g_free (rreqs[i]);
+      g_free (rreqs);
+    }
   if (entries)
-    *entries = rentries;
+    {
+      *entries = rentries;
+    }
+  else
+    {
+      for (i = 0; i < rlen; i++)
+        atom_entry_delete (rentries[i]);
+      g_free (rentries);
+    }
   if (len)
     *len = rlen;
 }
@@ -134,6 +151,7 @@ atom_retrieve_feed (AtomCtx *ctx)
     return NULL;
   feed = atom_feed_new ();
   atom_feed_entry_append_array (feed, entries, len);
+  g_free (entries);
   return feed;
 }