]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/cnid/cnid_delete.c
Introduce Conncurrent Data Store (CDB) support to CNID. This is phase 1.
[netatalk.git] / libatalk / cnid / cnid_delete.c
index e01beab028ca7f310f39f1deef22845fa3a9ab2b..1b0d36d9f8dd6f15c70c0c3dee1038cb12dd4859 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: cnid_delete.c,v 1.13 2002-01-19 21:42:08 jmarcus Exp $
+ * $Id: cnid_delete.c,v 1.14 2002-08-30 03:12:52 jmarcus Exp $
  *
  * Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
  * All Rights Reserved. See COPYRIGHT.
 
 #include "cnid_private.h"
 
+#ifdef CNID_DB_CDB
+    #define tid    NULL
+#endif /* CNID_DB_CDB */
+
 int cnid_delete(void *CNID, const cnid_t id) {
     CNID_private *db;
     DBT key, data;
+#ifndef CNID_DB_CDB
     DB_TXN *tid;
+#endif /* CNID_DB_CDB */
     int rc, found = 0;
 
     if (!(db = CNID) || !id || (db->flags & CNIDFLAG_DB_RO)) {
@@ -46,8 +52,10 @@ int cnid_delete(void *CNID, const cnid_t id) {
         case 0:
             found = 1;
             break;
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             break;
+#endif /* CNID_DB_CDB */
         case DB_NOTFOUND:
 #ifdef DEBUG
             LOG(log_info, logtype_default, "cnid_delete: CNID %u not in database",
@@ -61,17 +69,20 @@ int cnid_delete(void *CNID, const cnid_t id) {
         }
     }
 
+#ifndef CNID_DB_CDB
 retry:
     if ((rc = txn_begin(db->dbenv, NULL, &tid, 0)) != 0) {
         LOG(log_error, logtype_default, "cnid_delete: Failed to begin transaction: %s",
             db_strerror(rc));
         return rc;
     }
+#endif /* CNID_DB_CDB */
 
     /* Now delete from the main CNID database. */
     key.data = (cnid_t *)&id;
     key.size = sizeof(id);
     if ((rc = db->db_cnid->del(db->db_cnid, tid, &key, 0))) {
+#ifndef CNID_DB_CDB
         int ret;
         if ((ret = txn_abort(tid)) != 0) {
             LOG(log_error, logtype_default, "cnid_delete: txn_abort: %s", db_strerror(ret));
@@ -81,8 +92,11 @@ retry:
         case DB_LOCK_DEADLOCK:
             goto retry;
         default:
+#endif /* CNID_DB_CDB */
             goto abort_err;
+#ifndef CNID_DB_CDB
         }
+#endif /* CNID_DB_CDB */
     }
 
     /* Now delete from dev/ino database. */
@@ -90,6 +104,7 @@ retry:
     key.size = CNID_DEVINO_LEN;
     if ((rc = db->db_devino->del(db->db_devino, tid, &key, 0))) {
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             if ((rc = txn_abort(tid)) != 0) {
                 LOG(log_error, logtype_default, "cnid_delete: txn_abort: %s",
@@ -97,15 +112,18 @@ retry:
                 return rc;
             }
             goto retry;
+#endif /* CNID_DB_CDB */
         case DB_NOTFOUND:
             /* Quietly fall through if the entry isn't found. */
             break;
         default:
+#ifndef CNID_DB_CDB
             if ((rc = txn_abort(tid)) != 0) {
                 LOG(log_error, logtype_default, "cnid_delete: txn_abort: %s",
                     db_strerror(rc));
                 return rc;
             }
+#endif /* CNID_DB_CDB */
             goto abort_err;
         }
     }
@@ -116,6 +134,7 @@ retry:
     key.size = data.size - CNID_DEVINO_LEN;
     if ((rc = db->db_didname->del(db->db_didname, tid, &key, 0))) {
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             if ((rc = txn_abort(tid)) != 0) {
                 LOG(log_error, logtype_default, "cnid_delete: txn_abort: %s",
@@ -123,14 +142,17 @@ retry:
                 return rc;
             }
             goto retry;
+#endif /* CNID_DB_CDB */
         case DB_NOTFOUND:
             break;
         default:
+#ifndef CNID_DB_CDB
             if ((rc = txn_abort(tid)) != 0) {
                 LOG(log_error, logtype_default, "cnid_delete: txn_abort: %s",
                     db_strerror(rc));
                 return rc;
             }
+#endif /* CNID_DB_CDB */
             goto abort_err;
         }
     }
@@ -138,11 +160,13 @@ retry:
 #ifdef DEBUG
     LOG(log_info, logtype_default, "cnid_delete: Deleting CNID %u", ntohl(id));
 #endif
+#ifndef CNID_DB_CDB
     if ((rc = txn_commit(tid, 0)) != 0) {
         LOG(log_error, logtype_default, "cnid_delete: Failed to commit transaction: %s",
             db_strerror(rc));
         return rc;
     }
+#endif /* CNID_DB_CDB */
     return 0;
 
 abort_err: