fixed a problem with the number of timed events growing without bound with the new...
authorAndrew Tridgell <tridge@samba.org>
Tue, 8 May 2007 11:16:29 +0000 (21:16 +1000)
committerAndrew Tridgell <tridge@samba.org>
Tue, 8 May 2007 11:16:29 +0000 (21:16 +1000)
common/ctdb_ltdb.c
include/ctdb_private.h

index 9b19dd45e4f4fd4e602e5ae459025ca5923364ae..876522f86f0c4bbcffee962c48086d1e0adf21d6 100644 (file)
@@ -440,8 +440,9 @@ static void ctdb_ltdb_seqnum_check(struct event_context *ev, struct timed_event
        ctdb_db->seqnum = new_seqnum;
 
        /* setup a new timer */
-       event_add_timed(ctdb->ev, ctdb_db, timeval_current_ofs(ctdb->seqnum_frequency, 0),
-                       ctdb_ltdb_seqnum_check, ctdb_db);
+       ctdb_db->te = event_add_timed(ctdb->ev, ctdb_db, 
+                                     timeval_current_ofs(ctdb->seqnum_frequency, 0),
+                                     ctdb_ltdb_seqnum_check, ctdb_db);
 }
 
 /*
@@ -456,8 +457,11 @@ int32_t ctdb_ltdb_enable_seqnum(struct ctdb_context *ctdb, uint32_t db_id)
                return -1;
        }
 
-       event_add_timed(ctdb->ev, ctdb_db, timeval_current_ofs(ctdb->seqnum_frequency, 0),
-                       ctdb_ltdb_seqnum_check, ctdb_db);
+       if (ctdb_db->te == NULL) {
+               ctdb_db->te = event_add_timed(ctdb->ev, ctdb_db, 
+                                             timeval_current_ofs(ctdb->seqnum_frequency, 0),
+                                             ctdb_ltdb_seqnum_check, ctdb_db);
+       }
 
        tdb_enable_seqnum(ctdb_db->ltdb->tdb);
        ctdb_db->seqnum = tdb_get_seqnum(ctdb_db->ltdb->tdb);
index 208b896211d54f7fcb7bbcf56cbc707e0dbe260a..3ade8e714b2632fb1da7bbb16745c23ec417b5b1 100644 (file)
@@ -246,6 +246,7 @@ struct ctdb_db_context {
        struct tdb_wrap *ltdb;
        struct ctdb_registered_call *calls; /* list of registered calls */
        uint32_t seqnum;
+       struct timed_event *te;
 };