]> code.citadel.org Git - citadel.git/blobdiff - citadel/server/modules/expire/serv_expire.c
berkeley_db.c: improvements to transactional data store
[citadel.git] / citadel / server / modules / expire / serv_expire.c
index 876edc9fa4c8b167ee1960be256ce246a2d2e390..f360804a2639c2068b4d0cf7a4aad7a9d221f628 100644 (file)
@@ -552,6 +552,7 @@ int PurgeVisits(void) {
        }
 
        // Now delete every visit on the purged list
+       cdb_begin_transaction();
        while (VisitPurgeList != NULL) {
                IndexLen = GenerateRelationshipIndex(IndexBuf,
                                VisitPurgeList->vp_roomnum,
@@ -563,6 +564,7 @@ int PurgeVisits(void) {
                VisitPurgeList = vptr;
                ++purged;
        }
+       cdb_end_transaction();
 
        return(purged);
 }
@@ -599,10 +601,12 @@ int PurgeUseTable(StrBuf *ErrMsg) {
        // Phase 2: delete the records
        syslog(LOG_DEBUG, "Purge use table: phase 2");
        int i;
+       cdb_begin_transaction();
        for (i=0; i<purged; ++i) {
                struct UseTable *u = (struct UseTable *)array_get_element_at(purge_list, i);
                cdb_delete(CDB_USETABLE, &u->hash, sizeof(int));
        }
+       cdb_end_transaction();
        array_free(purge_list);
 
        syslog(LOG_DEBUG, "Purge use table: finished (purged %d of %d records)", purged, total);
@@ -647,6 +651,7 @@ int PurgeEuidIndexTable(void) {
 
        // Phase 2: delete the records
        syslog(LOG_DEBUG, "Purge euid index: phase 2");
+       cdb_begin_transaction();
        while (el != NULL) {
                cdb_delete(CDB_EUIDINDEX, el->ep_key, el->ep_keylen);
                free(el->ep_key);
@@ -654,6 +659,7 @@ int PurgeEuidIndexTable(void) {
                free(el);
                el = eptr;
        }
+       cdb_end_transaction();
 
        syslog(LOG_DEBUG, "Purge euid index: finished (purged %d records)", purged);
        return(purged);