]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/adouble/ad_lock.h
Opening files without metadata EA may result in broken metadata EA
[netatalk.git] / libatalk / adouble / ad_lock.h
index 490bff2669e148cd37ba07f740f3ccb9463e72ee..2d15da908bbab2d0673edebcfbb1f258750263f3 100644 (file)
@@ -7,24 +7,23 @@
  * around. that way, we can honor locks created by the same process
  * with the same file. */
 
-#define adf_lock_init(a)                            \
-    do {                                            \
-        (a)->adf_lockmax = (a)->adf_lockcount = 0;  \
-        (a)->adf_excl = 0;(a)->adf_lock = NULL;     \
+#define adf_lock_init(a) do {   \
+        (a)->adf_lockmax = 0;   \
+        (a)->adf_lockcount = 0; \
+        (a)->adf_lock = NULL;   \
     } while (0)
 
-#define adf_lock_free(a)                                      \
-    do {                                                      \
+#define adf_lock_free(a) do {                                 \
         int i;                                                \
-        if ((a)->adf_lock != NULL) {                          \
-            for (i = 0; i < (a)->adf_lockcount; i++) {        \
-                adf_lock_t *lock = (a)->adf_lock + i;         \
-                if (--(*lock->refcount) < 1)                  \
-                    free(lock->refcount);                     \
-            }                                                 \
-            free((a)->adf_lock);                              \
-            adf_lock_init(a);                                 \
+        if (!(a)->adf_lock)                                   \
+            break;                                            \
+        for (i = 0; i < (a)->adf_lockcount; i++) {            \
+            adf_lock_t *lock = (a)->adf_lock + i;             \
+            if (--(*lock->refcount) < 1)                      \
+                free(lock->refcount);                         \
         }                                                     \
+        free((a)->adf_lock);                                  \
+        adf_lock_init(a);                                     \
     } while (0)
 
 #endif /* libatalk/adouble/ad_private.h */