X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/5fd8cc8409d0efadc07dfe8d6774ad9ff477663d..c9be386a30dc7145ac757fae66c255b21da26d5d:/lock_server.h?ds=sidebyside diff --git a/lock_server.h b/lock_server.h index e24e359..560167f 100644 --- a/lock_server.h +++ b/lock_server.h @@ -1,36 +1,50 @@ -// this is the lock server -// the lock client has a similar interface - #ifndef lock_server_h #define lock_server_h -#include +#include "types.h" #include "lock_protocol.h" -#include "lock_client.h" -#include "rpc.h" -#include -#include -#include -#include "mutex.h" - -using namespace std; - -typedef map lock_map; - -class lock_server { - - protected: - int nacquire; - mutex lock_lock; - lock_map locks; - mutex &get_lock(lock_protocol::lockid_t lid); - - 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 &); +#include "rsm.h" +#include "rpc/fifo.h" + +typedef string callback_t; +typedef pair holder_t; + +class lock_state { +public: + lock_state(); + lock_state(const lock_state &other); + bool held; + holder_t held_by; + list wanted_by; + map old_requests; + mutex m; + lock_state& operator=(const lock_state&); + + MEMBERS(held, held_by, wanted_by) +}; + +MARSHALLABLE(lock_state) + +typedef map lock_map; + +class lock_server : public 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 retry_fifo; + fifo revoke_fifo; + rsm *rsm_; + public: + lock_server(rsm *r = 0); + lock_protocol::status stat(int &, lock_protocol::lockid_t); + void revoker(); + void retryer(); + 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); }; #endif