[cvs] bogofilter/src datastore_db_private.h,1.1.2.7,1.1.2.8 datastore_db_trad.c,1.1.2.9,1.1.2.10 dat
Fast Bayesian spam filter along lines suggested by Paul Graham
Brought to you by:
m-a
From: David R. <re...@us...> - 2005-01-31 00:55:23
|
Update of /cvsroot/bogofilter/bogofilter/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11362 Modified Files: Tag: RTS datastore_db_private.h datastore_db_trad.c datastore_db_trans.c Log Message: Add dsm method sync, which replaces function db_flush_dirty. Index: datastore_db_trad.c =================================================================== RCS file: /cvsroot/bogofilter/bogofilter/src/Attic/datastore_db_trad.c,v retrieving revision 1.1.2.9 retrieving revision 1.1.2.10 diff -u -d -r1.1.2.9 -r1.1.2.10 --- datastore_db_trad.c 31 Jan 2005 00:50:25 -0000 1.1.2.9 +++ datastore_db_trad.c 31 Jan 2005 00:55:13 -0000 1.1.2.10 @@ -61,6 +61,7 @@ static int tra_abort (void *vhandle); static int tra_commit (void *vhandle); static ex_t tra_common_close (DB_ENV *dbe, const char *db_file); +static int tra_sync (DB_ENV *env, int ret); /* OO function lists */ @@ -75,6 +76,7 @@ &tra_abort, &tra_commit, &tra_common_close, + &tra_sync, }; DB_ENV *tra_get_env_dbe (dbe_t *env) @@ -100,6 +102,13 @@ return EX_OK; } +int tra_sync (DB_ENV *env, int ret) +{ + (void) env; + (void) ret; + return 0; +} + int tra_lock(void *vhandle, int open_mode) { int e = 0; Index: datastore_db_private.h =================================================================== RCS file: /cvsroot/bogofilter/bogofilter/src/Attic/datastore_db_private.h,v retrieving revision 1.1.2.7 retrieving revision 1.1.2.8 diff -u -d -r1.1.2.7 -r1.1.2.8 --- datastore_db_private.h 31 Jan 2005 00:50:25 -0000 1.1.2.7 +++ datastore_db_private.h 31 Jan 2005 00:55:13 -0000 1.1.2.8 @@ -20,6 +20,7 @@ typedef void dsm_init_config (void *vhandle, u_int32_t numlocks, u_int32_t numobjs); typedef int dsm_lock (void *handle, int open_mode); typedef ex_t dsm_common_close (DB_ENV *dbe, const char *db_file); +typedef int dsm_sync (DB_ENV *env, int ret); typedef struct { dsm_get_env_dbe *dsm_get_env_dbe; @@ -32,6 +33,7 @@ dsm_function *dsm_abort; dsm_function *dsm_commit; dsm_common_close *dsm_common_close; + dsm_sync *dsm_sync; } dsm_t; /** implementation internal type to keep track of databases Index: datastore_db_trans.c =================================================================== RCS file: /cvsroot/bogofilter/bogofilter/src/Attic/datastore_db_trans.c,v retrieving revision 1.1.2.11 retrieving revision 1.1.2.12 diff -u -d -r1.1.2.11 -r1.1.2.12 --- datastore_db_trans.c 31 Jan 2005 00:50:25 -0000 1.1.2.11 +++ datastore_db_trans.c 31 Jan 2005 00:55:13 -0000 1.1.2.12 @@ -81,6 +81,7 @@ static int txn_abort (void *vhandle); static int txn_commit (void *vhandle); static ex_t txn_common_close (DB_ENV *dbe, const char *db_file); +static int txn_sync (DB_ENV *env, int ret); /* OO function lists */ @@ -94,7 +95,8 @@ &txn_begin, &txn_abort, &txn_commit, - &txn_common_close + &txn_common_close, + &txn_sync, }; /* non-OO static function prototypes */ @@ -579,7 +581,7 @@ * or 120 min have passed since the previous checkpoint */ /* kB min flags */ ret = BF_TXN_CHECKPOINT(env->dbe, 64, 120, 0); - ret = db_flush_dirty(env->dbe, ret); + ret = txn_sync(env->dbe, ret); if (ret) print_error(__FILE__, __LINE__, "DBE->txn_checkpoint returned %s", db_strerror(ret)); @@ -592,6 +594,22 @@ free(env); } +static int txn_sync(DB_ENV *env, int ret) +{ +#if DB_AT_LEAST(3,0) && DB_AT_MOST(4,0) + /* flush dirty pages in buffer pool */ + while (ret == DB_INCOMPLETE) { + rand_sleep(10000,1000000); + ret = BF_MEMP_SYNC(env, NULL); + } +#else + (void)env; + ret = 0; +#endif + + return ret; +} + /* initialize data base, configure some lock table sizes * (which can be overridden in the DB_CONFIG file) * and lock the file to tell other parts we're initialized and @@ -747,7 +765,7 @@ /* checkpoint the transactional system */ e = BF_TXN_CHECKPOINT(env, 0, 0, 0); - e = db_flush_dirty(env, e); + e = txn_sync(env, e); if (e) { print_error(__FILE__, __LINE__, "DB_ENV->txn_checkpoint failed: %s", db_strerror(e)); |