Partially fixed a bug in the test suite that led to test runs randomly failing.
[invirt/third/libt4.git] / lock_client.h
index 541cc23..5db2cbf 100644 (file)
@@ -1,15 +1,12 @@
 // lock client interface.
 
 #ifndef lock_client_h
 // lock client interface.
 
 #ifndef lock_client_h
-
 #define lock_client_h
 
 #ifdef __cplusplus
 
 #define lock_client_h
 
 #ifdef __cplusplus
 
-#include <string>
+#include "types.h"
 #include "lock_protocol.h"
 #include "lock_protocol.h"
-#include "rpc/rpc.h"
-#include "lang/verify.h"
 #include "rpc/fifo.h"
 #include "rsm_client.h"
 
 #include "rpc/fifo.h"
 #include "rsm_client.h"
 
@@ -19,16 +16,8 @@ class lock_release_user {
         virtual ~lock_release_user() {}
 };
 
         virtual ~lock_release_user() {}
 };
 
-using std::string;
-using std::thread;
-using std::list;
-using std::map;
-
-typedef string callback;
-
 class lock_state {
 public:
 class lock_state {
 public:
-    lock_state();
     enum {
         none = 0,
         retrying,
     enum {
         none = 0,
         retrying,
@@ -36,15 +25,15 @@ public:
         locked,
         acquiring,
         releasing
         locked,
         acquiring,
         releasing
-    } state;
-    std::thread::id held_by;
-    list<std::thread::id> wanted_by;
+    } state = none;
+    thread::id held_by;
+    list<thread::id> wanted_by;
     mutex m;
     mutex m;
-    map<std::thread::id, std::condition_variable> c;
+    map<thread::id, cond> c;
     lock_protocol::xid_t xid;
     lock_protocol::xid_t xid;
-    void wait();
+    void wait(lock & mutex_lock);
     void signal();
     void signal();
-    void signal(std::thread::id who);
+    void signal(thread::id who);
 };
 
 typedef map<lock_protocol::lockid_t, lock_state> lock_map;
 };
 
 typedef map<lock_protocol::lockid_t, lock_state> lock_map;
@@ -54,10 +43,10 @@ typedef map<lock_protocol::lockid_t, lock_state> lock_map;
 class lock_client {
     private:
         rpcc *cl;
 class lock_client {
     private:
         rpcc *cl;
-        std::thread releaser_thread;
+        thread releaser_thread;
         rsm_client *rsmc;
         rsm_client *rsmc;
-        class lock_release_user *lu;
-        unsigned int rlock_port;
+        lock_release_user *lu;
+        in_port_t rlock_port;
         string hostname;
         string id;
         mutex xid_mutex;
         string hostname;
         string id;
         mutex xid_mutex;
@@ -67,8 +56,8 @@ class lock_client {
         lock_map lock_table;
         lock_state &get_lock_state(lock_protocol::lockid_t lid);
     public:
         lock_map lock_table;
         lock_state &get_lock_state(lock_protocol::lockid_t lid);
     public:
-        static unsigned int last_port;
-        lock_client(string xdst, class lock_release_user *l = 0);
+        static in_port_t last_port;
+        lock_client(string xdst, lock_release_user *l = 0);
         ~lock_client() {}
         lock_protocol::status acquire(lock_protocol::lockid_t);
         lock_protocol::status release(lock_protocol::lockid_t);
         ~lock_client() {}
         lock_protocol::status acquire(lock_protocol::lockid_t);
         lock_protocol::status release(lock_protocol::lockid_t);