More cleaning
[invirt/third/libt4.git] / lock_server.h
1 #ifndef lock_server_h
2 #define lock_server_h
3
4 #include "types.h"
5 #include "lock_protocol.h"
6 #include "rsm.h"
7 #include "rpc/fifo.h"
8
9 typedef string callback_t;
10 typedef pair<callback_t, lock_protocol::xid_t> holder_t;
11
12 class lock_state {
13 public:
14     lock_state();
15     lock_state(const lock_state &other);
16     bool held;
17     holder_t held_by;
18     list<holder_t> wanted_by;
19     map<callback_t, lock_protocol::xid_t> old_requests;
20     mutex m;
21     lock_state& operator=(const lock_state&);
22 };
23
24 typedef map<lock_protocol::lockid_t, lock_state> lock_map;
25
26 class lock_server : public rsm_state_transfer {
27     private:
28         int nacquire;
29         mutex lock_table_lock;
30         lock_map lock_table;
31         lock_state &get_lock_state(lock_protocol::lockid_t lid);
32         fifo<lock_protocol::lockid_t> retry_fifo;
33         fifo<lock_protocol::lockid_t> revoke_fifo;
34         class rsm *rsm;
35     public:
36         lock_server(class rsm *rsm = 0);
37         lock_protocol::status stat(int &, lock_protocol::lockid_t);
38         void revoker();
39         void retryer();
40         string marshal_state();
41         void unmarshal_state(string state);
42         int acquire(int &, lock_protocol::lockid_t, string id, lock_protocol::xid_t);
43         int release(int &, lock_protocol::lockid_t, string id, lock_protocol::xid_t);
44 };
45
46 #endif