More renaming
[invirt/third/libt4.git] / lock_server.h
index e24e359..2aa8445 100644 (file)
@@ -1,36 +1,57 @@
-// this is the lock server
-// the lock client has a similar interface
-
 #ifndef lock_server_h
 #define lock_server_h
 
 #include <string>
-#include "lock_protocol.h"
-#include "lock_client.h"
-#include "rpc.h"
-#include <pthread.h>
-#include <list>
-#include <map>
-#include "mutex.h"
-
-using namespace std;
-
-typedef map<lock_protocol::lockid_t, mutex> lock_map;
 
-class lock_server {
-
- protected:
-  int nacquire;
-  mutex lock_lock;
-  lock_map locks;
-  mutex &get_lock(lock_protocol::lockid_t lid);
+#include <map>
+#include <vector>
+#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<callback, lock_protocol::xid_t> holder;
+
+class lock_state {
+public:
+    lock_state();
+    lock_state(const lock_state &other);
+    bool held;
+    holder held_by;
+    list<holder> wanted_by;
+    map<callback, lock_protocol::xid_t> old_requests;
+    mutex m;
+    lock_state& operator=(const lock_state&);
+};
 
- 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 &);
+typedef map<lock_protocol::lockid_t, lock_state> 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<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();
+        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