5 #include "lock_protocol.h"
9 typedef pair<callback_t, lock_protocol::xid_t> holder_t;
14 lock_state(const lock_state & other);
17 list<holder_t> wanted_by;
18 map<callback_t, lock_protocol::xid_t> old_requests;
20 lock_state & operator=(const lock_state &);
22 MEMBERS(held, held_by, wanted_by)
25 MARSHALLABLE_STRUCT(lock_state)
27 typedef map<lock_protocol::lockid_t, lock_state> lock_map;
29 class lock_server : private rsm_state_transfer {
32 mutex lock_table_lock;
34 lock_state & get_lock_state(lock_protocol::lockid_t lid);
35 fifo<lock_protocol::lockid_t> retry_fifo;
36 fifo<lock_protocol::lockid_t> revoke_fifo;
38 string marshal_state();
39 void unmarshal_state(const string & state);
40 void revoker NORETURN ();
41 void retryer NORETURN ();
44 lock_protocol::status acquire(int &, lock_protocol::lockid_t, const callback_t & id, lock_protocol::xid_t);
45 lock_protocol::status release(int &, lock_protocol::lockid_t, const callback_t & id, lock_protocol::xid_t);
46 lock_protocol::status stat(int &, lock_protocol::lockid_t, const callback_t & id);