libpreludedb/master: Force upgrading copied count before next database retrieval

[email protected] Fri, 29 Jan 2010 18:00:43 +0100 (CET)
Newsgroups gmane.comp.security.ids.prelude.cvs
Message-ID <[email protected]>
commit 3ef573868ba897dcfc817876894dd326e6964de8
Author: Yoann Vandoorselaere <[email protected]>
Date:   Thu Jan 21 13:32:58 2010 +0100

    Force upgrading copied count before next database retrieval
    
    This fix a problem where the offset was not correctly calculated
    when retrieving alert to be copied, when the previous number of
    events copied didn't exceed events_per_transaction.


========================================

 preludedb-admin.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

========================================

diff --git a/preludedb-admin.c b/preludedb-admin.c
index 9609eb5..5ce7907 100644
--- a/preludedb-admin.c
+++ b/preludedb-admin.c
@@ -202,12 +202,16 @@ static void flush_transaction_if_needed(preludedb_t *db, unsigned int *event_no,
         if ( ! event_no )
                 cur_count += increment;
 
-        else if ( events_per_transaction && ((*event_no) += increment) >= events_per_transaction ) {
-                preludedb_transaction_end(db);
-                preludedb_transaction_start(db);
+        else if ( events_per_transaction ) {
+                (*event_no) += increment;
+
+                if ( *event_no >= events_per_transaction || (increment == 0 && *event_no) ) {
+                        preludedb_transaction_end(db);
+                        preludedb_transaction_start(db);
 
-                cur_count += *event_no;
-                *event_no = 0;
+                        cur_count += *event_no;
+                        *event_no = 0;
+                }
         }
 }
 
@@ -630,6 +634,8 @@ static int copy_iterate(preludedb_t *src, preludedb_t *dst,
                 flush_transaction_if_needed(dst, dst_event_no, 1);
         }
 
+        flush_transaction_if_needed(dst, dst_event_no, 0);
+
         if ( delete_index ) {
                 stat_compute(stat_delete, count = delete(src, delete_tbl, delete_index), count);
                 if ( count < 0 ) {
_______________________________________________
Prelude-cvslog site list
[email protected]
http://lists.prelude-ids.org/mailman/listinfo/prelude-cvslog