/*
- * $Id: cnid_add.c,v 1.4 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_add.c,v 1.5 2001-08-16 14:30:29 uhees Exp $
*
* Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
* All Rights Reserved. See COPYRIGHT.
if ((errno = db->db_cnid->put(db->db_cnid, tid,
key, data, DB_NOOVERWRITE))) {
txn_abort(tid);
- if (errno == EAGAIN)
+ if (errno == DB_LOCK_DEADLOCK)
goto retry;
return errno;
if ((errno = db->db_devino->put(db->db_devino, tid,
&altkey, &altdata, 0))) {
txn_abort(tid);
- if (errno == EAGAIN)
+ if (errno == DB_LOCK_DEADLOCK)
goto retry;
return errno;
if ((errno = db->db_didname->put(db->db_didname, tid,
&altkey, &altdata, 0))) {
txn_abort(tid);
- if (errno == EAGAIN)
+ if (errno == DB_LOCK_DEADLOCK)
goto retry;
return errno;
}
data.size = CNID_HEADER_LEN + len + 1;
- /* Abort and retry the modification. */
- if (0) {
-retry: if ((errno = txn_abort(tid)) != 0)
- syslog(LOG_ERR, "cnid_add: txn_begin failed (%d)", errno);
- /* FALLTHROUGH */
- }
-
- /* Begin the transaction. */
- if ((errno = txn_begin(db->dbenv, NULL, &tid, 0)) != 0) {
- syslog(LOG_ERR, "cnid_add: txn_begin failed (%d)", errno);
- goto cleanup_err;
- }
-
/* start off with the hint. it should be in network byte order.
* we need to make sure that somebody doesn't add in restricted
* cnid's to the database. */
if (ntohl(hint) >= CNID_START) {
/* if the key doesn't exist, add it in. don't fiddle with nextID. */
- errno = add_cnid(db, tid, &key, &data);
+ errno = add_cnid(db, NULL, &key, &data);
switch (errno) {
case DB_KEYEXIST: /* need to use RootInfo after all. */
break;
default:
syslog(LOG_ERR, "cnid_add: unable to add CNID(%x)", hint);
- hint = 0;
- goto cleanup_abort;
+ goto cleanup_err;
case 0:
if (debug)
syslog(LOG_ERR, "cnid_add: used hint for did %d, name %s as %d", did, name, hint);
- goto cleanup_commit;
+ return hint;
}
}
+ /* Abort and retry the modification. */
+ if (0) {
+retry: if ((errno = txn_abort(tid)) != 0)
+ syslog(LOG_ERR, "cnid_add: txn_begin failed (%d)", errno);
+ /* FALLTHROUGH */
+ }
+
+ /* Begin the transaction. */
+ if ((errno = txn_begin(db->dbenv, NULL, &tid, 0)) != 0) {
+ syslog(LOG_ERR, "cnid_add: txn_begin failed (%d)", errno);
+ goto cleanup_err;
+ }
+
memset(&rootinfo_key, 0, sizeof(&rootinfo_key));
memset(&rootinfo_data, 0, sizeof(&rootinfo_data));
/*
- * $Id: cnid_close.c,v 1.4 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_close.c,v 1.5 2001-08-16 14:30:29 uhees Exp $
*/
#ifdef HAVE_CONFIG_H
db->db_didname->close(db->db_didname, 0);
db->db_devino->close(db->db_devino, 0);
db->db_cnid->close(db->db_cnid, 0);
-
db->dbenv->close(db->dbenv, 0);
- /* db->dbenv->remove(db->dbenv, db->dbenv->db_home, 0); */
-
+
if (db->lockfd > -1)
close(db->lockfd); /* this will also close any lock we have. */
+
free(db);
}
/*
- * $Id: cnid_delete.c,v 1.4 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_delete.c,v 1.5 2001-08-16 14:30:29 uhees Exp $
*
* Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
* All Rights Reserved. See COPYRIGHT.
if ((errno = db->db_cnid->get(db->db_cnid, tid, &key, &data, 0))) {
txn_abort(tid);
switch (errno) {
- case EAGAIN:
+ case DB_LOCK_DEADLOCK:
goto retry;
case DB_NOTFOUND:
key.data = data.data;
key.size = CNID_DEVINO_LEN;
if ((errno = db->db_devino->del(db->db_devino, tid, &key, 0))) {
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
txn_abort(tid);
goto retry;
}
key.data = (char *) data.data + CNID_DEVINO_LEN;
key.size = data.size - CNID_DEVINO_LEN;
if ((errno = db->db_didname->del(db->db_didname, tid, &key, 0))) {
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
txn_abort(tid);
goto retry;
}
key.size = sizeof(id);
if ((errno = db->db_cnid->del(db->db_cnid, tid, &key, 0))) {
txn_abort(tid);
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
goto retry;
}
goto abort_err;
/*
- * $Id: cnid_lookup.c,v 1.4 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_lookup.c,v 1.5 2001-08-16 14:30:29 uhees Exp $
*/
#ifdef HAVE_CONFIG_H
key.data = buf; /* dev/ino is the first part of the buffer */
key.size = CNID_DEVINO_LEN;
while ((errno = db->db_devino->get(db->db_devino, NULL,
- &key, &devdata, 0))) {
- if (errno == EAGAIN)
+ &key, &devdata, 0))) {
+ if (errno == DB_LOCK_DEADLOCK)
continue;
if (errno == DB_NOTFOUND) {
key.size = CNID_DID_LEN + len + 1;
memset(&diddata, 0, sizeof(diddata));
while ((errno = db->db_didname->get(db->db_didname, NULL,
- &key, &diddata, 0))) {
- if (errno == EAGAIN)
+ &key, &diddata, 0))) {
+ if (errno == DB_LOCK_DEADLOCK)
continue;
if (errno == DB_NOTFOUND) {
/*
- * $Id: cnid_nextid.c,v 1.4 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_nextid.c,v 1.5 2001-08-16 14:30:29 uhees Exp $
*/
#ifdef unused
return id;
}
#endif
+
/*
- * $Id: cnid_open.c,v 1.4 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_open.c,v 1.5 2001-08-16 14:30:29 uhees Exp $
*
* Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
* All Rights Reserved. See COPYRIGHT.
key.size = DBVERSION_KEYLEN;
while ((errno = db->db_didname->get(db->db_didname, NULL, &key, &data, 0))) {
switch (errno) {
- case EAGAIN:
+ case DB_LOCK_DEADLOCK:
continue;
case DB_NOTFOUND:
dbversion_retry:
if (db->db_didname->put(db->db_didname, NULL, &key, &data,
DB_NOOVERWRITE))
- if (errno == EAGAIN)
+ if (errno == DB_LOCK_DEADLOCK)
goto dbversion_retry;
break;
default:
fail_appinit:
syslog(LOG_ERR, "cnid_open: db_open failed");
db->dbenv->close(db->dbenv, 0);
- /* db->dbenv->remove(db->dbenv, db->dbenv->db_home, 0); */
fail_lock:
if (db->lockfd > -1)
/*
- * $Id: cnid_resolve.c,v 1.3 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_resolve.c,v 1.4 2001-08-16 14:30:29 uhees Exp $
*/
#ifdef HAVE_CONFIG_H
key.data = id;
key.size = sizeof(*id);
while ((errno = db->db_cnid->get(db->db_cnid, NULL, &key, &data, 0))) {
- if (errno == EAGAIN)
+ if (errno == DB_LOCK_DEADLOCK)
continue;
if (errno != DB_NOTFOUND)
/*
- * $Id: cnid_update.c,v 1.4 2001-08-15 02:16:25 srittau Exp $
+ * $Id: cnid_update.c,v 1.5 2001-08-16 14:30:30 uhees Exp $
*/
#ifdef HAVE_CONFIG_H
key.size = sizeof(id);
if ((errno = db->db_cnid->get(db->db_cnid, tid, &key, &data, 0))) {
txn_abort(tid);
- if (errno == EAGAIN)
+ if (errno == DB_LOCK_DEADLOCK)
goto retry;
goto update_err;
}
key.data = data.data;
key.size = CNID_DEVINO_LEN;
if ((errno = db->db_devino->del(db->db_devino, tid, &key, 0))) {
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
txn_abort(tid);
goto retry;
}
key.data = (char *) data.data + CNID_DEVINO_LEN;
key.size = data.size - CNID_DEVINO_LEN;
if ((errno = db->db_didname->del(db->db_didname, tid, &key, 0))) {
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
txn_abort(tid);
goto retry;
}
altdata.size = sizeof(id);
if ((errno = db->db_devino->put(db->db_devino, tid, &key, &altdata, 0))) {
txn_abort(tid);
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
goto retry;
}
goto update_err;
key.size = data.size - CNID_DEVINO_LEN;
if ((errno = db->db_didname->put(db->db_didname, tid, &key, &altdata, 0))) {
txn_abort(tid);
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
goto retry;
}
goto update_err;
key.size = sizeof(id);
if ((errno = db->db_cnid->put(db->db_cnid, tid, &key, &data, 0))) {
txn_abort(tid);
- if (errno == EAGAIN) {
+ if (errno == DB_LOCK_DEADLOCK) {
goto retry;
}
goto update_err;