#include "rsm.h"
#include "rpc/fifo.h"
-typedef string callback_t;
typedef pair<callback_t, lock_protocol::xid_t> holder_t;
class lock_state {
public:
lock_state();
- lock_state(const lock_state &other);
+ lock_state(const lock_state & other);
bool held;
holder_t held_by;
list<holder_t> wanted_by;
map<callback_t, lock_protocol::xid_t> old_requests;
mutex m;
- lock_state& operator=(const lock_state&);
+ lock_state & operator=(const lock_state &);
MEMBERS(held, held_by, wanted_by)
};
-MARSHALLABLE(lock_state)
+MARSHALLABLE_STRUCT(lock_state)
typedef map<lock_protocol::lockid_t, lock_state> lock_map;
-class lock_server : public rsm_state_transfer {
+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);
+ lock_state & get_lock_state(lock_protocol::lockid_t lid);
fifo<lock_protocol::lockid_t> retry_fifo;
fifo<lock_protocol::lockid_t> revoke_fifo;
- class rsm *rsm;
- public:
- lock_server(class rsm *rsm = 0);
- lock_protocol::status stat(int &, lock_protocol::lockid_t);
- void revoker();
- void retryer();
+ rsm *rsm_;
string marshal_state();
- void unmarshal_state(string state);
- int acquire(int &, lock_protocol::lockid_t, string id, lock_protocol::xid_t);
- int release(int &, lock_protocol::lockid_t, string id, lock_protocol::xid_t);
+ 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);
};
#endif