- {
- ml.unlock();
- rpcc *cl = h.safebind();
- if (cl) {
- ret = cl->call_timeout(paxos_protocol::heartbeat, rpcc::to(1000), r, me, vid);
- }
- ml.lock();
- }
- if (ret != paxos_protocol::OK) {
- if (ret == rpc_const::atmostonce_failure ||
- ret == rpc_const::oldsrv_failure) {
- mgr.delete_handle(m);
- } else {
- tprintf("doheartbeat: problem with %s (%d) my vid %d his vid %d\n",
- m.c_str(), ret, vid, r);
- if (ret < 0) res = FAILURE;
- else res = VIEWERR;
- }
+
+ cfg_mutex_lock.unlock();
+ int r = 0, ret = rpc_const::bind_failure;
+ if (rpcc *cl = h.safebind())
+ ret = cl->call_timeout(paxos_protocol::heartbeat, rpcc::to(100), r, me, vid);
+ cfg_mutex_lock.lock();
+
+ heartbeat_t res = OK;
+ switch (ret) {
+ case paxos_protocol::OK:
+ break;
+ case rpc_const::atmostonce_failure:
+ case rpc_const::oldsrv_failure:
+ invalidate_handle(m);
+ break;
+ default:
+ LOG("problem with " << m << " (" << ret << ") my vid " << vid << " his vid " << r);
+ res = (ret < 0) ? FAILURE : VIEWERR;