Coda Distributed File System
lockqueue.h
Go to the documentation of this file.
1/* BLURB gpl
2
3 Coda File System
4 Release 8
5
6 Copyright (c) 1987-2021 Carnegie Mellon University
7 Additional copyrights listed below
8
9This code is distributed "AS IS" without warranty of any kind under
10the terms of the GNU General Public Licence Version 2, as shown in the
11file LICENSE. The technical and financial contributors to Coda are
12listed in the file CREDITS.
13
14 Additional copyrights
15 none currently
16
17#*/
18
19/*
20 *
21 * Specification of the Volume Lock Queue facility
22 *
23 */
24
25#ifndef _VOL_LOCKQUEUE_H_
26#define _VOL_LOCKQUEUE_H_ 1
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#include <stdio.h>
33#include <lwp/lock.h>
34#include <rpc2/rpc2.h>
35
36#ifdef __cplusplus
37}
38#endif
39
40#include <vice.h>
41#include <dlist.h>
42
43#define NO_LOCK 0 /* remains for compatibility */
44#define VOL_NO_LOCK NO_LOCK
45#define VOL_SHARED_LOCK SHARED_LOCK
46#define VOL_EXCL_LOCK WRITE_LOCK
47
49
50class lq_iterator;
51class lqent;
53
54class lqman {
55 char *name;
56 struct Lock lock;
57 PROCESS pid;
58 dlist objects;
59
60 friend void LQman_init(void *);
61 int func(void) EXCLUDES_TRANSACTION;
62
63public:
64 lqman(const char *name = "anonymous lqman");
65 ~lqman();
66 void add(lqent *);
67 void remove(lqent *);
68 lqent *find(VolumeId);
69 lqent *findanddeq(VolumeId);
70 void print();
71 void print(FILE *);
72 void print(int);
73};
74
76public:
79};
80
81class lqent : public dlink {
82 friend class lqman;
83 friend int GetVolObj(VolumeId, Volume **, int, int, unsigned);
84 friend void PutVolObj(Volume **, int, int);
85 friend long ViceLockVol(RPC2_Handle, VolumeId, UserId *, RPC2_Unsigned *);
86 friend long ViceUnlockVol(RPC2_Handle, VolumeId);
87
88 VolumeId Vid;
89 time_t Time;
90 int deqing;
91
92 lqent(VolumeId);
93 ~lqent();
94
95public:
96 void print();
97 void print(FILE *);
98 void print(int);
99};
100
101extern lqman *LockQueueMan;
102extern void InitLockVolQue();
103extern void InitLockQueue();
104#endif /* _VOL_LOCKQUEUE_H_ */
Definition: dlist.h:80
Definition: dlist.h:50
Definition: lockqueue.h:75
lqent * operator()()
Definition: lockqueue.cc:201
lq_iterator(dlist &)
Definition: lockqueue.cc:197
Definition: lockqueue.h:81
friend long ViceLockVol(RPC2_Handle, VolumeId, UserId *, RPC2_Unsigned *)
friend void PutVolObj(Volume **, int, int)
Definition: volume.cc:1991
void print()
Definition: lockqueue.cc:215
friend long ViceUnlockVol(RPC2_Handle, VolumeId)
friend int GetVolObj(VolumeId, Volume **, int, int, unsigned)
Definition: volume.cc:1933
Definition: lockqueue.h:54
lqent * find(VolumeId)
Definition: lockqueue.cc:148
void remove(lqent *)
Definition: lockqueue.cc:142
~lqman()
Definition: lockqueue.cc:82
void print()
Definition: lockqueue.cc:174
friend void LQman_init(void *)
Definition: lockqueue.cc:64
void add(lqent *)
Definition: lockqueue.cc:134
lqman(const char *name="anonymous lqman")
Definition: lockqueue.cc:70
lqent * findanddeq(VolumeId)
Definition: lockqueue.cc:161
#define EXCLUDES_TRANSACTION
Definition: coda_tsa.h:108
void InitLockVolQue()
void ForceUnlockVol(VolumeId) EXCLUDES_TRANSACTION
Definition: lockqueue.cc:49
lqman * LockQueueMan
Definition: lockqueue.cc:46
void LQman_init(void *c) EXCLUDES_TRANSACTION
Definition: lockqueue.cc:64
void InitLockQueue()
Definition: lockqueue.cc:59
name
Definition: pwdtopdbtool.py:40
uint32_t RPC2_Unsigned
Definition: rpc2.h:300
RPC2_Integer RPC2_Handle
Definition: rpc2.h:345
Definition: lock.h:68
Definition: volume.h:234
Definition: lwp.private_pt.h:33
char c
Definition: tdb.c:54