projects
/
invirt/third/libt4.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cosmetic improvements.
[invirt/third/libt4.git]
/
lock_server.cc
diff --git
a/lock_server.cc
b/lock_server.cc
index
b724140
..
90ad5b2
100644
(file)
--- a/
lock_server.cc
+++ b/
lock_server.cc
@@
-1,6
+1,5
@@
// the caching lock server implementation
// the caching lock server implementation
-#include "types.h"
#include "lock_server.h"
#include <unistd.h>
#include <arpa/inet.h>
#include "lock_server.h"
#include <unistd.h>
#include <arpa/inet.h>
@@
-11,11
+10,11
@@
lock_state::lock_state():
{
}
{
}
-lock_state::lock_state(const lock_state &other) {
+lock_state::lock_state(const lock_state & other) {
*this = other;
}
*this = other;
}
-lock_state& lock_state::operator=(const lock_state& o) {
+lock_state & lock_state::operator=(const lock_state & o) {
held = o.held;
held_by = o.held_by;
wanted_by = o.wanted_by;
held = o.held;
held_by = o.held_by;
wanted_by = o.wanted_by;
@@
-29,21
+28,25
@@
lock_state & lock_server::get_lock_state(lock_protocol::lockid_t lid) {
return lock_table[lid];
}
return lock_table[lid];
}
-lock_server::lock_server(class rsm *_rsm) : rsm (_rsm) {
+lock_server::lock_server(rsm & r) : rsm_ (&r) {
thread(&lock_server::revoker, this).detach();
thread(&lock_server::retryer, this).detach();
thread(&lock_server::revoker, this).detach();
thread(&lock_server::retryer, this).detach();
- rsm->set_state_transfer(this);
+ r.set_state_transfer(this);
+
+ r.reg(lock_protocol::acquire, &lock_server::acquire, this);
+ r.reg(lock_protocol::release, &lock_server::release, this);
+ r.reg(lock_protocol::stat, &lock_server::stat, this);
}
}
-void lock_server::revoker() [[noreturn]] {
+void lock_server::revoker () {
while (1) {
lock_protocol::lockid_t lid;
revoke_fifo.deq(&lid);
LOG("Revoking " << lid);
while (1) {
lock_protocol::lockid_t lid;
revoke_fifo.deq(&lid);
LOG("Revoking " << lid);
- if (rsm && !rsm->amiprimary())
+ if (rsm_ && !rsm_->amiprimary())
continue;
continue;
- lock_state &st = get_lock_state(lid);
+ lock_state & st = get_lock_state(lid);
holder_t held_by;
{
lock sl(st.m);
holder_t held_by;
{
lock sl(st.m);
@@
-63,15
+66,15
@@
void lock_server::revoker() [[noreturn]] {
}
}
}
}
-void lock_server::retryer() [[noreturn]] {
+void lock_server::retryer() {
while (1) {
lock_protocol::lockid_t lid;
retry_fifo.deq(&lid);
while (1) {
lock_protocol::lockid_t lid;
retry_fifo.deq(&lid);
- if (rsm && !rsm->amiprimary())
+ if (rsm_ && !rsm_->amiprimary())
continue;
LOG("Sending retry for " << lid);
continue;
LOG("Sending retry for " << lid);
- lock_state &st = get_lock_state(lid);
+ lock_state & st = get_lock_state(lid);
holder_t front;
{
lock sl(st.m);
holder_t front;
{
lock sl(st.m);
@@
-93,10
+96,10
@@
void lock_server::retryer() [[noreturn]] {
}
}
}
}
-int lock_server::acquire(int &, lock_protocol::lockid_t lid, string id, lock_protocol::xid_t xid) {
+lock_protocol::status lock_server::acquire(int &, lock_protocol::lockid_t lid, const callback_t & id, lock_protocol::xid_t xid) {
LOG("lid=" << lid << " client=" << id << "," << xid);
holder_t h = holder_t(id, xid);
LOG("lid=" << lid << " client=" << id << "," << xid);
holder_t h = holder_t(id, xid);
- lock_state &st = get_lock_state(lid);
+ lock_state & st = get_lock_state(lid);
lock sl(st.m);
// deal with duplicated requests
lock sl(st.m);
// deal with duplicated requests
@@
-151,9
+154,9
@@
int lock_server::acquire(int &, lock_protocol::lockid_t lid, string id, lock_pro
return lock_protocol::RETRY;
}
return lock_protocol::RETRY;
}
-int lock_server::release(int &, lock_protocol::lockid_t lid, callback_t id, lock_protocol::xid_t xid) {
+lock_protocol::status lock_server::release(int &, lock_protocol::lockid_t lid, const callback_t & id, lock_protocol::xid_t xid) {
LOG("lid=" << lid << " client=" << id << "," << xid);
LOG("lid=" << lid << " client=" << id << "," << xid);
- lock_state &st = get_lock_state(lid);
+ lock_state & st = get_lock_state(lid);
lock sl(st.m);
if (st.held && st.held_by == holder_t(id, xid)) {
st.held = false;
lock sl(st.m);
if (st.held && st.held_by == holder_t(id, xid)) {
st.held = false;
@@
-166,18
+169,15
@@
int lock_server::release(int &, lock_protocol::lockid_t lid, callback_t id, lock
string lock_server::marshal_state() {
lock sl(lock_table_lock);
string lock_server::marshal_state() {
lock sl(lock_table_lock);
- marshall rep;
- rep << nacquire << lock_table;
- return rep.content();
+ return marshall(nacquire, lock_table).content();
}
}
-void lock_server::unmarshal_state(string state) {
+void lock_server::unmarshal_state(const string & state) {
lock sl(lock_table_lock);
lock sl(lock_table_lock);
- unmarshall rep(state, false);
- rep >> nacquire >> lock_table;
+ unmarshall(state, false, nacquire, lock_table);
}
}
-lock_protocol::status lock_server::stat(int &r, lock_protocol::lockid_t lid) {
+lock_protocol::status lock_server::stat(int & r, lock_protocol::lockid_t lid, const callback_t &) {
LOG("stat request for " << lid);
VERIFY(0);
r = nacquire;
LOG("stat request for " << lid);
VERIFY(0);
r = nacquire;