diff options
Diffstat (limited to 'lib/hdb/db.c')
| -rw-r--r-- | lib/hdb/db.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/lib/hdb/db.c b/lib/hdb/db.c index c6cf58813814..4cee8d0097a1 100644 --- a/lib/hdb/db.c +++ b/lib/hdb/db.c @@ -44,6 +44,7 @@ typedef struct { HDB hdb; /* generic members */ int lock_fd; /* DB-specific */ + int do_sync; /* DB-specific */ } DB1_HDB; static krb5_error_code @@ -77,6 +78,25 @@ DB_destroy(krb5_context context, HDB *db) } static krb5_error_code +DB_set_sync(krb5_context context, HDB *db, int on) +{ + DB1_HDB *db1 = (DB1_HDB *)db; + DB *d = (DB*)db->hdb_db; + krb5_error_code ret = 0; + + db1->do_sync = on; + if (on) { + ret = (*d->sync)(d, 0); + if (ret == -1) { + ret = errno; + krb5_set_error_message(context, ret, "Database %s put sync error: %s", + db->hdb_name, strerror(ret)); + } + } + return ret; +} + +static krb5_error_code DB_lock(krb5_context context, HDB *db, int operation) { @@ -203,6 +223,7 @@ static krb5_error_code DB__put(krb5_context context, HDB *db, int replace, krb5_data key, krb5_data value) { + DB1_HDB *db1 = (DB1_HDB *)db; DB *d = (DB*)db->hdb_db; DBT k, v; int code; @@ -222,19 +243,14 @@ DB__put(krb5_context context, HDB *db, int replace, if(code == 1) { return HDB_ERR_EXISTS; } - code = (*d->sync)(d, 0); - if (code == -1) { - code = errno; - krb5_set_error_message(context, code, "Database %s put sync error: %s", - db->hdb_name, strerror(code)); - return code; - } - return 0; + + return db->hdb_set_sync(context, db, db1->do_sync); } static krb5_error_code DB__del(krb5_context context, HDB *db, krb5_data key) { + DB1_HDB *db1 = (DB1_HDB *)db; DB *d = (DB*)db->hdb_db; DBT k; krb5_error_code code; @@ -250,14 +266,7 @@ DB__del(krb5_context context, HDB *db, krb5_data key) db->hdb_name, strerror(code)); return code; } - code = (*d->sync)(d, 0); - if (code == -1) { - code = errno; - krb5_set_error_message(context, code, "Database %s del sync error: %s", - db->hdb_name, strerror(code)); - return code; - } - return 0; + return db->hdb_set_sync(context, db, db1->do_sync); } static DB * @@ -371,8 +380,10 @@ hdb_db1_create(krb5_context context, HDB **db, (*db)->hdb__put = DB__put; (*db)->hdb__del = DB__del; (*db)->hdb_destroy = DB_destroy; + (*db)->hdb_set_sync = DB_set_sync; (*db1)->lock_fd = -1; + (*db1)->do_sync = 1; return 0; } |
