Просмотр исходного кода

发现了ResponseHandler.cc一个bug,RpcServerTest还有bug,仍然会core掉

tanghai 14 лет назад
Родитель
Сommit
c9f37b07f4

+ 2 - 0
Src/CMakeLists.txt

@@ -3,6 +3,8 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Cmake)
 SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Cmake)
 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
 
 
+ADD_DEFINITIONS(-DDEBUG)
+
 PROJECT(Cpp)
 PROJECT(Cpp)
 
 
 OPTION(BUILD_TESTS "Decide if the test suite shall be built or not" ON)
 OPTION(BUILD_TESTS "Decide if the test suite shall be built or not" ON)

+ 1 - 1
Src/Egametang/Rpc/ResponseHandler.cc

@@ -5,7 +5,7 @@
 namespace Egametang {
 namespace Egametang {
 
 
 ResponseHandler::ResponseHandler(
 ResponseHandler::ResponseHandler(
-		MethodInfoPtr& method_info, std::size_t id, MessageHandler& send_message):
+		MethodInfoPtr& method_info, std::size_t id, MessageHandler& message_handler):
 		id(id), message_handler(message_handler)
 		id(id), message_handler(message_handler)
 {
 {
 	method = method_info->method_descriptor;
 	method = method_info->method_descriptor;

+ 5 - 8
Src/Egametang/Rpc/RpcChannelTest.cc

@@ -91,10 +91,9 @@ public:
 	}
 	}
 };
 };
 
 
-static void IOServiceRun(boost::asio::io_service* io_service, CountBarrier* barrier)
+static void IOServiceRun(boost::asio::io_service* io_service)
 {
 {
 	io_service->run();
 	io_service->run();
-	barrier->Signal();
 }
 }
 
 
 TEST_F(RpcChannelTest, Echo)
 TEST_F(RpcChannelTest, Echo)
@@ -103,15 +102,13 @@ TEST_F(RpcChannelTest, Echo)
 	boost::asio::io_service io_client;
 	boost::asio::io_service io_client;
 
 
 	CountBarrier barrier(2);
 	CountBarrier barrier(2);
-	ThreadPool thread_pool(2);
-	thread_pool.Schedule(boost::bind(&IOServiceRun, &io_server, &barrier));
-	thread_pool.Schedule(boost::bind(&IOServiceRun, &io_client, &barrier));
-	barrier.Wait();
-
-	barrier.Reset(2);
 	RpcServerTest rpc_server(io_server, port, barrier);
 	RpcServerTest rpc_server(io_server, port, barrier);
 	RpcChannel rpc_channel(io_client, "127.0.0.1", port);
 	RpcChannel rpc_channel(io_client, "127.0.0.1", port);
 	EchoService_Stub service(&rpc_channel);
 	EchoService_Stub service(&rpc_channel);
+	
+	ThreadPool thread_pool(2);
+	thread_pool.Schedule(boost::bind(&IOServiceRun, &io_server));
+	thread_pool.Schedule(boost::bind(&IOServiceRun, &io_client));
 
 
 	EchoRequest request;
 	EchoRequest request;
 	request.set_num(100);
 	request.set_num(100);

+ 1 - 3
Src/Egametang/Rpc/RpcServer.cc

@@ -65,19 +65,17 @@ void RpcServer::Stop()
 	{
 	{
 		session->Stop();
 		session->Stop();
 	}
 	}
-	sessions.clear();
+	CHECK_EQ(0U, sessions.size());
 }
 }
 
 
 void RpcServer::RunService(RpcSessionPtr session, RpcMetaPtr meta,
 void RpcServer::RunService(RpcSessionPtr session, RpcMetaPtr meta,
 		StringPtr message, MessageHandler message_handler)
 		StringPtr message, MessageHandler message_handler)
 {
 {
-	VLOG(3) << "meta: " << meta->ToString();
 	MethodInfoPtr method_info = methods[meta->method];
 	MethodInfoPtr method_info = methods[meta->method];
 
 
 	ResponseHandlerPtr response_handler(
 	ResponseHandlerPtr response_handler(
 			new ResponseHandler(method_info, meta->id, message_handler));
 			new ResponseHandler(method_info, meta->id, message_handler));
 	response_handler->Request()->ParseFromString(*message);
 	response_handler->Request()->ParseFromString(*message);
-	VLOG(3) << "request: " << response_handler->Request()->DebugString();
 
 
 	google::protobuf::Closure* done = google::protobuf::NewCallback(
 	google::protobuf::Closure* done = google::protobuf::NewCallback(
 			this, &RpcServer::OnCallMethod,
 			this, &RpcServer::OnCallMethod,

+ 2 - 2
Src/Egametang/Rpc/RpcServerTest.cc

@@ -27,7 +27,6 @@ public:
 	{
 	{
 		int32 num = request->num();
 		int32 num = request->num();
 		response->set_num(num);
 		response->set_num(num);
-		VLOG(2) << "echo response: " << response->DebugString();
 		if (done)
 		if (done)
 		{
 		{
 			done->Run();
 			done->Run();
@@ -77,10 +76,11 @@ TEST_F(RpcServerTest, ChannelAndServer)
 	EchoResponse response;
 	EchoResponse response;
 	ASSERT_EQ(0U, response.num());
 	ASSERT_EQ(0U, response.num());
 
 
-	CountBarrier barrier(1);
+	CountBarrier barrier;
 	service.Echo(NULL, &request, &response,
 	service.Echo(NULL, &request, &response,
 			google::protobuf::NewCallback(&barrier, &CountBarrier::Signal));
 			google::protobuf::NewCallback(&barrier, &CountBarrier::Signal));
 	barrier.Wait();
 	barrier.Wait();
+	VLOG(2) << "response: \n" << response.DebugString();
 
 
 	channel.Stop();
 	channel.Stop();
 	server.Stop();
 	server.Stop();