X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/ba03b19875aa2e3586e49b10904563cdd3b91de0..869c0cc91d8f6b2bb80026616372d16450b64d9f:/lock_client.h diff --git a/lock_client.h b/lock_client.h index 5db2cbf..74f17a8 100644 --- a/lock_client.h +++ b/lock_client.h @@ -9,6 +9,7 @@ #include "lock_protocol.h" #include "rpc/fifo.h" #include "rsm_client.h" +#include "maybe.h" class lock_release_user { public: @@ -26,39 +27,40 @@ public: acquiring, releasing } state = none; - thread::id held_by; - list wanted_by; - mutex m; - map c; + std::thread::id held_by; + std::list wanted_by; + std::mutex m; + std::map c; lock_protocol::xid_t xid; void wait(lock & mutex_lock); void signal(); void signal(thread::id who); }; -typedef map lock_map; +typedef std::map lock_map; // Clients that caches locks. The server can revoke locks using // lock_revoke_server. class lock_client { private: - rpcc *cl; + unique_ptr cl; + unique_ptr rlsrpc; thread releaser_thread; - rsm_client *rsmc; + unique_ptr rsmc; lock_release_user *lu; in_port_t rlock_port; string hostname; string id; - mutex xid_mutex; + std::mutex xid_mutex; lock_protocol::xid_t next_xid; - fifo release_fifo; - mutex lock_table_lock; + fifo> release_fifo; + std::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); public: static in_port_t last_port; lock_client(string xdst, lock_release_user *l = 0); - ~lock_client() {} + ~lock_client(); lock_protocol::status acquire(lock_protocol::lockid_t); lock_protocol::status release(lock_protocol::lockid_t); int stat(lock_protocol::lockid_t); @@ -69,7 +71,9 @@ class lock_client { #endif // C++ +#ifdef __cplusplus extern "C" { +#endif struct _t4_lock_client; typedef struct _t4_lock_client t4_lock_client; @@ -92,6 +96,8 @@ t4_status t4_lock_client_acquire(t4_lock_client *, t4_lockid_t); t4_status t4_lock_client_release(t4_lock_client *, t4_lockid_t); t4_status t4_lock_client_stat(t4_lock_client *, t4_lockid_t); +#ifdef __cplusplus } +#endif #endif