X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/603bac8fcb3697f283e6537d81b4a92e457ebbad..b2609562b3d4fc548afcc0a3dfe4ff5fd4ae3d36:/rsm.cc diff --git a/rsm.cc b/rsm.cc index 81f0e4c..a44c24b 100644 --- a/rsm.cc +++ b/rsm.cc @@ -90,7 +90,7 @@ rsm::rsm(const string & _first, const string & _me) : stf(0), primary(_first), insync (false), inviewchange (true), vid_commit(0), partitioned (false), dopartition(false), break1(false), break2(false) { - cfg = new config(_first, _me, this); + cfg = unique_ptr(new config(_first, _me, this)); if (_first == _me) { // Commit the first view here. We can not have acceptor::acceptor @@ -106,14 +106,16 @@ rsm::rsm(const string & _first, const string & _me) : rsmrpc->reg(rsm_protocol::joinreq, &rsm::joinreq, this); // tester must be on different port, otherwise it may partition itself - testsvr = new rpcs((in_port_t)stoi(_me) + 1); + testsvr = unique_ptr(new rpcs((in_port_t)stoi(_me) + 1)); testsvr->reg(rsm_test_protocol::net_repair, &rsm::test_net_repairreq, this); testsvr->reg(rsm_test_protocol::breakpoint, &rsm::breakpointreq, this); +} - { - lock ml(rsm_mutex); - thread(&rsm::recovery, this).detach(); - } +void rsm::start() { + lock ml(rsm_mutex); + rsmrpc->start(); + testsvr->start(); + thread(&rsm::recovery, this).detach(); } void rsm::reg1(int proc, handler *h) { @@ -214,7 +216,7 @@ bool rsm::statetransfer(const string & m, lock & rsm_mutex_lock) rsm_mutex_lock.unlock(); cl = h.safebind(); if (cl) { - ret = cl->call_timeout(rsm_protocol::transferreq, rpcc::to(100), + ret = cl->call_timeout(rsm_protocol::transferreq, milliseconds(100), r, cfg->myaddr(), last_myvs, vid_insync); } rsm_mutex_lock.lock(); @@ -257,7 +259,7 @@ bool rsm::join(const string & m, lock & rsm_mutex_lock) { rsm_mutex_lock.unlock(); cl = h.safebind(); if (cl != 0) { - ret = cl->call_timeout(rsm_protocol::joinreq, rpcc::to(12000), log, + ret = cl->call_timeout(rsm_protocol::joinreq, milliseconds(12000), log, cfg->myaddr(), last_myvs); } rsm_mutex_lock.lock(); @@ -347,7 +349,7 @@ rsm_client_protocol::status rsm::client_invoke(string & r, int procno, const str if (!cl) return rsm_client_protocol::BUSY; int ignored_rval; - auto ret = (rsm_protocol::status)cl->call_timeout(rsm_protocol::invoke, rpcc::to(100), ignored_rval, procno, vs, req); + auto ret = (rsm_protocol::status)cl->call_timeout(rsm_protocol::invoke, milliseconds(100), ignored_rval, procno, vs, req); LOG("Invoke returned " << ret); if (ret != rsm_protocol::OK) return rsm_client_protocol::BUSY;