X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5987a5357ccfd818d540a7aa58eb498a1be07aa1..f0dcb6b97d6d40f67698d1f71ac26970f1776f82:/lock_server.h?ds=sidebyside diff --git a/lock_server.h b/lock_server.h index 2aa8445..1f30f87 100644 --- a/lock_server.h +++ b/lock_server.h @@ -1,57 +1,49 @@ #ifndef lock_server_h #define lock_server_h -#include - -#include -#include +#include "types.h" #include "lock_protocol.h" -#include "rpc/rpc.h" -#include "rsm_state_transfer.h" #include "rsm.h" #include "rpc/fifo.h" -#include "lock.h" - -using std::string; -using std::pair; -using std::list; -using std::map; -typedef string callback; -typedef pair holder; +typedef pair holder_t; class lock_state { public: lock_state(); - lock_state(const lock_state &other); + lock_state(const lock_state & other); bool held; - holder held_by; - list wanted_by; - map old_requests; + holder_t held_by; + list wanted_by; + map old_requests; mutex m; - lock_state& operator=(const lock_state&); + lock_state & operator=(const lock_state &); + + MEMBERS(held, held_by, wanted_by) }; +MARSHALLABLE_STRUCT(lock_state) + typedef map 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 retry_fifo; fifo 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