------------------------------------------------------------
revno: 761
revision-id:[EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
branch nick: tridge.stable
timestamp: Tue 2008-01-15 20:11:44 +1100
message:
  fixed a memory leak in the recovery daemon
modified:
  server/ctdb_recoverd.c         recoverd.c-20070503213540-bvxuyd9jm1f7ig90-1
=== modified file 'server/ctdb_recoverd.c'
--- a/server/ctdb_recoverd.c    2008-01-08 23:22:20 +0000
+++ b/server/ctdb_recoverd.c    2008-01-15 09:11:44 +0000
@@ -756,7 +756,13 @@
                }
 
                data = tdb_fetch(v->ctdb_db->ltdb->tdb, call.key);
-               if (data.dptr == NULL || data.dsize < sizeof(struct 
ctdb_ltdb_header)) {
+               if (data.dptr == NULL) {
+                       tdb_chainunlock(v->ctdb_db->ltdb->tdb, call.key);
+                       continue;
+               }
+
+               if (data.dsize < sizeof(struct ctdb_ltdb_header)) {
+                       free(data.dptr);
                        tdb_chainunlock(v->ctdb_db->ltdb->tdb, call.key);
                        continue;
                }
@@ -764,10 +770,13 @@
                hdr = (struct ctdb_ltdb_header *)data.dptr;
                if (hdr->dmaster == v->rec->ctdb->pnn) {
                        /* its already local */
+                       free(data.dptr);
                        tdb_chainunlock(v->ctdb_db->ltdb->tdb, call.key);
                        continue;
                }
 
+               free(data.dptr);
+
                state = ctdb_call_send(v->ctdb_db, &call);
                tdb_chainunlock(v->ctdb_db->ltdb->tdb, call.key);
                if (state == NULL) {

Reply via email to