]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/ipfilter/lib/rwlock_emul.c
This commit was generated by cvs2svn to compensate for changes in r159609,
[FreeBSD/FreeBSD.git] / contrib / ipfilter / lib / rwlock_emul.c
1 /*      $FreeBSD$       */
2
3 #include "ipf.h"
4
5 #define EMM_MAGIC       0x97dd8b3a
6
7 void eMrwlock_read_enter(rw, file, line)
8 eMrwlock_t *rw;
9 char *file;
10 int line;
11 {
12         if (rw->eMrw_magic != EMM_MAGIC) {
13                 fprintf(stderr, "%s:eMrwlock_read_enter(%p): bad magic: %#x\n",
14                         rw->eMrw_owner, rw, rw->eMrw_magic);
15                 abort();
16         }
17         if (rw->eMrw_read != 0 || rw->eMrw_write != 0) {
18                 fprintf(stderr,
19                         "%s:eMrwlock_read_enter(%p): already locked: %d/%d\n",
20                         rw->eMrw_owner, rw, rw->eMrw_read, rw->eMrw_write);
21                 abort();
22         }
23         rw->eMrw_read++;
24         rw->eMrw_heldin = file;
25         rw->eMrw_heldat = line;
26 }
27
28
29 void eMrwlock_write_enter(rw, file, line)
30 eMrwlock_t *rw;
31 char *file;
32 int line;
33 {
34         if (rw->eMrw_magic != EMM_MAGIC) {
35                 fprintf(stderr, "%s:eMrwlock_write_enter(%p): bad magic: %#x\n",
36                         rw->eMrw_owner, rw, rw->eMrw_magic);
37                 abort();
38         }
39         if (rw->eMrw_read != 0 || rw->eMrw_write != 0) {
40                 fprintf(stderr,
41                         "%s:eMrwlock_write_enter(%p): already locked: %d/%d\n",
42                         rw->eMrw_owner, rw, rw->eMrw_read, rw->eMrw_write);
43                 abort();
44         }
45         rw->eMrw_write++;
46         rw->eMrw_heldin = file;
47         rw->eMrw_heldat = line;
48 }
49
50
51 void eMrwlock_downgrade(rw, file, line)
52 eMrwlock_t *rw;
53 char *file;
54 int line;
55 {
56         if (rw->eMrw_magic != EMM_MAGIC) {
57                 fprintf(stderr, "%s:eMrwlock_write_enter(%p): bad magic: %#x\n",
58                         rw->eMrw_owner, rw, rw->eMrw_magic);
59                 abort();
60         }
61         if (rw->eMrw_read != 0 || rw->eMrw_write != 1) {
62                 fprintf(stderr,
63                         "%s:eMrwlock_write_enter(%p): already locked: %d/%d\n",
64                         rw->eMrw_owner, rw, rw->eMrw_read, rw->eMrw_write);
65                 abort();
66         }
67         rw->eMrw_write--;
68         rw->eMrw_read++;
69         rw->eMrw_heldin = file;
70         rw->eMrw_heldat = line;
71 }
72
73
74 void eMrwlock_exit(rw)
75 eMrwlock_t *rw;
76 {
77         if (rw->eMrw_magic != EMM_MAGIC) {
78                 fprintf(stderr, "%s:eMrwlock_exit(%p): bad magic: %#x\n",
79                         rw->eMrw_owner, rw, rw->eMrw_magic);
80                 abort();
81         }
82         if (rw->eMrw_read != 1 && rw->eMrw_write != 1) {
83                 fprintf(stderr, "%s:eMrwlock_exit(%p): not locked: %d/%d\n",
84                         rw->eMrw_owner, rw, rw->eMrw_read, rw->eMrw_write);
85                 abort();
86         }
87         if (rw->eMrw_read == 1)
88                 rw->eMrw_read--;
89         else if (rw->eMrw_write == 1)
90                 rw->eMrw_write--;
91         rw->eMrw_heldin = NULL;
92         rw->eMrw_heldat = 0;
93 }
94
95
96 void eMrwlock_init(rw, who)
97 eMrwlock_t *rw;
98 char *who;
99 {
100         if (rw->eMrw_magic == EMM_MAGIC) {      /* safe bet ? */
101                 fprintf(stderr,
102                         "%s:eMrwlock_init(%p): already initialised?: %#x\n",
103                         rw->eMrw_owner, rw, rw->eMrw_magic);
104                 abort();
105         }
106         rw->eMrw_magic = EMM_MAGIC;
107         rw->eMrw_read = 0;
108         rw->eMrw_write = 0;
109         if (who != NULL)
110                 rw->eMrw_owner = strdup(who);
111         else
112                 rw->eMrw_owner = NULL;
113 }
114
115
116 void eMrwlock_destroy(rw)
117 eMrwlock_t *rw;
118 {
119         if (rw->eMrw_magic != EMM_MAGIC) {
120                 fprintf(stderr, "%s:eMrwlock_destroy(%p): bad magic: %#x\n",
121                         rw->eMrw_owner, rw, rw->eMrw_magic);
122                 abort();
123         }
124         memset(rw, 0xa5, sizeof(*rw));
125 }