- public:
- lock_server();
- ~lock_server() {};
- lock_protocol::status stat(int clt, lock_protocol::lockid_t lid, int &);
- lock_protocol::status acquire(int clt, lock_protocol::lockid_t lid, int &);
- lock_protocol::status release(int clt, lock_protocol::lockid_t lid, int &);
+MARSHALLABLE_STRUCT(lock_state)
+
+typedef map<lock_protocol::lockid_t, lock_state> lock_map;
+
+class lock_server : private rsm_state_transfer {
+ private:
+ int nacquire;
+ mutex lock_table_lock;
+ lock_map lock_table;
+ lock_state & get_lock_state(lock_protocol::lockid_t lid);
+ fifo<lock_protocol::lockid_t> retry_fifo;
+ fifo<lock_protocol::lockid_t> revoke_fifo;
+ rsm *rsm_;
+ string marshal_state();
+ void unmarshal_state(const string & state);
+ void revoker NORETURN ();
+ void retryer NORETURN ();
+ public:
+ lock_server(rsm & r);
+ lock_protocol::status acquire(int &, lock_protocol::lockid_t, const callback_t & id, lock_protocol::xid_t);
+ lock_protocol::status release(int &, lock_protocol::lockid_t, const callback_t & id, lock_protocol::xid_t);
+ lock_protocol::status stat(int &, lock_protocol::lockid_t, const callback_t & id);