// The rule is that a module releases its internal locks before it
// upcalls, but can keep its locks when calling down.
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "types.h"
-#include "handle.h"
#include "rsm.h"
+#include "handle.h"
#include "rsm_client.h"
+#include <unistd.h>
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<config>(new config(_first, _me, this));
if (_first == _me) {
// Commit the first view here. We can not have acceptor::acceptor
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<rpcs>(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) {