if (dbenv == NULL)
return 0;
+ if (rpmdb->db_opens > 1) {
+ rpmdb->db_opens--;
+ return 0;
+ }
+
rc = dbenv->close(dbenv, 0);
rc = cvtdberr(dbi, "dbenv->close", rc, _debug);
return alive;
}
-static int db_init(dbiIndex dbi, const char * dbhome, DB_ENV ** dbenvp)
+static int db_init(dbiIndex dbi, const char * dbhome)
{
+ rpmdb rdb = dbi->dbi_rpmdb;
DB_ENV *dbenv = NULL;
int rc, xx;
int retry_open = 2;
- if (dbenvp == NULL)
- return 1;
+ if (rdb->db_dbenv != NULL) {
+ rdb->db_opens++;
+ return 0;
+ }
rc = db_env_create(&dbenv, 0);
rc = cvtdberr(dbi, "db_env_create", rc, _debug);
if (rc)
goto errxit;
- *dbenvp = dbenv;
+ rdb->db_dbenv = dbenv;
+ rdb->db_opens = 1;
return 0;
}
- if (rpmdb->db_dbenv != NULL) {
- if (rpmdb->db_opens == 1) {
- xx = db_fini(dbi, (dbhome ? dbhome : ""));
- rpmdb->db_dbenv = NULL;
- }
- rpmdb->db_opens--;
- }
+ xx = db_fini(dbi, dbhome ? dbhome : "");
if (dbi->dbi_verify_on_close) {
DB_ENV * dbenv = NULL;
int xx;
DB * db = NULL;
- DB_ENV * dbenv = NULL;
uint32_t oflags;
int _printit;
if (oflags & DB_RDONLY)
dbi->dbi_verify_on_close = 0;
- if (rpmdb->db_dbenv == NULL) {
- rc = db_init(dbi, dbhome, &dbenv);
- if (rc == 0) {
- rpmdb->db_dbenv = dbenv;
- rpmdb->db_opens = 1;
- }
- } else {
- dbenv = rpmdb->db_dbenv;
- rpmdb->db_opens++;
- }
+ rc = db_init(dbi, dbhome);
{ char *dbiflags = prDbiOpenFlags(oflags, 0);
rpmlog(RPMLOG_DEBUG, "opening db index %s/%s %s mode=0x%x\n",
if (rc == 0) {
static int _lockdbfd = 0;
- rc = db_create(&db, dbenv, 0);
+ rc = db_create(&db, rpmdb->db_dbenv, 0);
rc = cvtdberr(dbi, "db_create", rc, _debug);
if (rc == 0 && db != NULL) {