]> arthur.barton.de Git - netatalk.git/commitdiff
in db result checking replaced EAGAIN by DB_LOCK_DEADLOCK; fixed a potential transact...
authoruhees <uhees>
Thu, 16 Aug 2001 14:30:29 +0000 (14:30 +0000)
committeruhees <uhees>
Thu, 16 Aug 2001 14:30:29 +0000 (14:30 +0000)
libatalk/cnid/cnid_add.c
libatalk/cnid/cnid_close.c
libatalk/cnid/cnid_delete.c
libatalk/cnid/cnid_lookup.c
libatalk/cnid/cnid_nextid.c
libatalk/cnid/cnid_open.c
libatalk/cnid/cnid_resolve.c
libatalk/cnid/cnid_update.c

index b1d2a6170362f3caa11a64d307f51a0c7d2e9f55..bea32b378af07a835571a8301dfaba6fac056a65 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -54,7 +54,7 @@ retry:
   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;
@@ -68,7 +68,7 @@ retry:
   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;
@@ -80,7 +80,7 @@ retry:
   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;
@@ -132,39 +132,38 @@ cnid_t cnid_add(void *CNID, const struct stat *st,
   }
   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));
 
index e9356979c360c48ddfc7c36dc76e6b0fbddfd975..0953f3db56c510dbb9837d11f4e86f1126380c11 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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
@@ -62,11 +62,10 @@ void cnid_close(void *CNID)
   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);
 }
index 682a92b9acce8da0fb9a30b66779388b5c11c90c..b41dc2b73c48f95c64ccf8ae2aa958a9a7168082 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -47,7 +47,7 @@ retry:
   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:
@@ -63,7 +63,7 @@ retry:
   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;
     }
@@ -82,7 +82,7 @@ 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;
     }
@@ -99,7 +99,7 @@ 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;
index 38f39c36c5e71e1f6405ddca06606126d44d58ce..794eb7108a653d0baa1f1d2e597e58501244b4fa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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
@@ -62,8 +62,8 @@ cnid_t cnid_lookup(void *CNID,
   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) {
@@ -81,8 +81,8 @@ cnid_t cnid_lookup(void *CNID,
   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) {
index b965ce44c332f36f7b0f5ea8378de5cf5eec2a17..cc57b92d8237258c6ab7b83d3d655ff3e02eac4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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
 
@@ -30,3 +30,4 @@ cnid_t cnid_nextid(void *CNID)
   return id;
 }
 #endif
+
index ea3cad0a93e1c524a675d3c312de96478721e585..89cda8a905da709a050be6f87026c0a09f8542d4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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.
@@ -247,7 +247,7 @@ mkdir_appledb:
   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:
@@ -260,7 +260,7 @@ mkdir_appledb:
 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:
@@ -347,7 +347,6 @@ dbversion_retry:
 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)
index 26682650ea3e33860632a05177592076f379887c..6997f62de063d148d2828ba3576548e6c1d360f1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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
@@ -35,7 +35,7 @@ char *cnid_resolve(void *CNID, cnid_t *id)
   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) 
index 6652b597a034ea3d5c4b258a9b2e7e72e03bb3c8..f830c9fce52449758a4ac9b0d9f6430e968d8eed 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $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
@@ -50,7 +50,7 @@ retry:
   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;
   }
@@ -59,7 +59,7 @@ retry:
   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;
     }
@@ -75,7 +75,7 @@ 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;
     }
@@ -101,7 +101,7 @@ 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;
@@ -112,7 +112,7 @@ retry:
   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;
@@ -123,7 +123,7 @@ retry:
   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;