]> arthur.barton.de Git - netatalk.git/blob - libatalk/adouble/ad_lock.h
Merge master
[netatalk.git] / libatalk / adouble / ad_lock.h
1 #ifndef LIBATALK_ADOUBLE_AD_PRIVATE_H
2 #define LIBATALK_ADOUBLE_AD_PRIVATE_H 1
3
4 #include <atalk/adouble.h>
5
6 /* this is so that we can keep lists of fds referencing the same file
7  * around. that way, we can honor locks created by the same process
8  * with the same file. */
9
10 #define adf_lock_init(a) do {   \
11         (a)->adf_lockmax = 0;   \
12         (a)->adf_lockcount = 0; \
13         (a)->adf_lock = NULL;   \
14     } while (0)
15
16 #define adf_lock_free(a) do {                                 \
17         int i;                                                \
18         if (!(a)->adf_lock)                                   \
19             break;                                            \
20         for (i = 0; i < (a)->adf_lockcount; i++) {            \
21             adf_lock_t *lock = (a)->adf_lock + i;             \
22             if (--(*lock->refcount) < 1)                      \
23                 free(lock->refcount);                         \
24         }                                                     \
25         free((a)->adf_lock);                                  \
26         adf_lock_init(a);                                     \
27     } while (0)
28
29 #endif /* libatalk/adouble/ad_private.h */