s->put();
}
got_remote_reset = true;
+ cond.Signal();
}
void ms_fast_dispatch(Message *m) {
Mutex::Locker l(lock);
// don't lose state
ASSERT_TRUE(static_cast<Session*>(server_conn->get_priv())->get_count() == 1);
+ srv_dispatcher.got_new = false;
conn = client_msgr->get_connection(server_msgr->get_myinst());
{
m = new MPing();
}
ASSERT_TRUE(static_cast<Session*>(conn->get_priv())->get_count() == 1);
server_conn = server_msgr->get_connection(client_msgr->get_myinst());
- ASSERT_TRUE(static_cast<Session*>(server_conn->get_priv())->get_count() == 1);
+ {
+ Mutex::Locker l(srv_dispatcher.lock);
+ while (!srv_dispatcher.got_remote_reset)
+ srv_dispatcher.cond.Wait(srv_dispatcher.lock);
+ }
// 2. test for client reconnect
ASSERT_FALSE(cli_dispatcher.got_remote_reset);
cli_dispatcher.got_connect = false;
+ cli_dispatcher.got_new = false;
+ cli_dispatcher.got_remote_reset = false;
server_conn->mark_down();
ASSERT_FALSE(server_conn->is_connected());
// ensure client detect server socket closed
+ {
+ Mutex::Locker l(cli_dispatcher.lock);
+ while (!cli_dispatcher.got_remote_reset)
+ cli_dispatcher.cond.Wait(cli_dispatcher.lock);
+ cli_dispatcher.got_remote_reset = false;
+ }
{
Mutex::Locker l(cli_dispatcher.lock);
while (!cli_dispatcher.got_connect)
}
CHECK_AND_WAIT_TRUE(conn->is_connected());
ASSERT_TRUE(conn->is_connected());
+
{
m = new MPing();
ASSERT_EQ(conn->send_message(m), 0);
cli_dispatcher.got_new = false;
}
// resetcheck happen
- ASSERT_TRUE(static_cast<Session*>(conn->get_priv())->get_count() == 1);
+ ASSERT_EQ(static_cast<Session*>(conn->get_priv())->get_count(), 1);
server_conn = server_msgr->get_connection(client_msgr->get_myinst());
- ASSERT_TRUE(static_cast<Session*>(server_conn->get_priv())->get_count() == 1);
- ASSERT_TRUE(cli_dispatcher.got_remote_reset);
+ ASSERT_EQ(static_cast<Session*>(server_conn->get_priv())->get_count(), 1);
cli_dispatcher.got_remote_reset = false;
server_msgr->shutdown();
conn->mark_down();
ASSERT_FALSE(conn->is_connected());
+ srv_dispatcher.got_new = false;
conn = client_msgr->get_connection(server_msgr->get_myinst());
{
m = new MPing();
ASSERT_TRUE(static_cast<Session*>(conn->get_priv())->get_count() == 1);
ConnectionRef server_conn = server_msgr->get_connection(client_msgr->get_myinst());
// server lose state
- ASSERT_TRUE(static_cast<Session*>(server_conn->get_priv())->get_count() == 1);
+ {
+ Mutex::Locker l(srv_dispatcher.lock);
+ while (!srv_dispatcher.got_new)
+ srv_dispatcher.cond.Wait(srv_dispatcher.lock);
+ }
+ ASSERT_EQ(static_cast<Session*>(server_conn->get_priv())->get_count(), 1);
// 2. test for client lossy
server_conn->mark_down();