1 #include "ipf.h"
2
3 #define EMM_MAGIC 0x9d7adba3
4
eMmutex_enter(mtx,file,line)5 void eMmutex_enter(mtx, file, line)
6 eMmutex_t *mtx;
7 char *file;
8 int line;
9 {
10 if (mtx->eMm_magic != EMM_MAGIC) {
11 fprintf(stderr, "%s:eMmutex_enter(%p): bad magic: %#x\n",
12 mtx->eMm_owner, mtx, mtx->eMm_magic);
13 abort();
14 }
15 if (mtx->eMm_held != 0) {
16 fprintf(stderr, "%s:eMmutex_enter(%p): already locked: %d\n",
17 mtx->eMm_owner, mtx, mtx->eMm_held);
18 abort();
19 }
20 mtx->eMm_held++;
21 mtx->eMm_heldin = file;
22 mtx->eMm_heldat = line;
23 }
24
25
eMmutex_exit(mtx)26 void eMmutex_exit(mtx)
27 eMmutex_t *mtx;
28 {
29 if (mtx->eMm_magic != EMM_MAGIC) {
30 fprintf(stderr, "%s:eMmutex_exit(%p): bad magic: %#x\n",
31 mtx->eMm_owner, mtx, mtx->eMm_magic);
32 abort();
33 }
34 if (mtx->eMm_held != 1) {
35 fprintf(stderr, "%s:eMmutex_exit(%p): not locked: %d\n",
36 mtx->eMm_owner, mtx, mtx->eMm_held);
37 abort();
38 }
39 mtx->eMm_held--;
40 mtx->eMm_heldin = NULL;
41 mtx->eMm_heldat = 0;
42 }
43
44
eMmutex_init(mtx,who)45 void eMmutex_init(mtx, who)
46 eMmutex_t *mtx;
47 char *who;
48 {
49 if (mtx->eMm_magic == EMM_MAGIC) { /* safe bet ? */
50 fprintf(stderr,
51 "%s:eMmutex_init(%p): already initialised?: %#x\n",
52 mtx->eMm_owner, mtx, mtx->eMm_magic);
53 abort();
54 }
55 mtx->eMm_magic = EMM_MAGIC;
56 mtx->eMm_held = 0;
57 if (who != NULL)
58 mtx->eMm_owner = strdup(who);
59 else
60 mtx->eMm_owner = NULL;
61 }
62
63
eMmutex_destroy(mtx)64 void eMmutex_destroy(mtx)
65 eMmutex_t *mtx;
66 {
67 if (mtx->eMm_magic != EMM_MAGIC) {
68 fprintf(stderr, "%s:eMmutex_destroy(%p): bad magic: %#x\n",
69 mtx->eMm_owner, mtx, mtx->eMm_magic);
70 abort();
71 }
72 if (mtx->eMm_held != 0) {
73 fprintf(stderr, "%s:eMmutex_enter(%p): still locked: %d\n",
74 mtx->eMm_owner, mtx, mtx->eMm_held);
75 abort();
76 }
77 memset(mtx, 0xa5, sizeof(*mtx));
78 }
79