Procházet zdrojové kódy

RpcSession stop在remove session的时候需要延迟删除
否则会出现bind在stop后执行,this指针已经失效的问题

tanghai před 14 roky
rodič
revize
5eaa0d9f53

+ 1 - 1
Cpp/Platform/Rpc/RpcCommunicator.cc

@@ -54,7 +54,7 @@ void RpcCommunicator::RecvMessage(RpcMetaPtr meta, StringPtr message,
 		Stop();
 		return;
 	}
-	message->resize(meta->size, '\0');
+	message->resize(meta->size, 0);
 	boost::asio::async_read(socket,
 			boost::asio::buffer(reinterpret_cast<char*>(&message->at(0)), meta->size),
 			boost::bind(&RpcCommunicator::RecvDone, this,

+ 4 - 1
Cpp/Platform/Rpc/RpcSession.cc

@@ -38,7 +38,10 @@ void RpcSession::Start()
 void RpcSession::Stop()
 {
 	RpcSessionPtr session = shared_from_this();
-	rpcServer.Remove(session);
+
+	// 延迟删除,必须等所有的bind执行完成后才能remove,
+	// 否则会出现this指针失效的问题
+	ioService.post(boost::bind(&RpcServer::Remove, &rpcServer, session));
 }
 
 } // namespace Egametang