#include "lock_protocol.h"
#include "rpc/fifo.h"
#include "rsm_client.h"
+#include "maybe.h"
class lock_release_user {
public:
// lock_revoke_server.
class lock_client {
private:
- unique_ptr<rpcc> cl;
unique_ptr<rpcs> rlsrpc;
thread releaser_thread;
unique_ptr<rsm_client> rsmc;
string id;
std::mutex xid_mutex;
lock_protocol::xid_t next_xid;
- fifo<lock_protocol::lockid_t> release_fifo;
+ fifo<maybe<lock_protocol::lockid_t>> release_fifo;
std::mutex lock_table_lock;
lock_map lock_table;
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);
- void releaser NORETURN ();
+ void releaser();
rlock_protocol::status revoke_handler(int &, lock_protocol::lockid_t, lock_protocol::xid_t);
rlock_protocol::status retry_handler(int &, lock_protocol::lockid_t, lock_protocol::xid_t);
};
void t4_lock_client_delete(t4_lock_client *);
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
}