Commit 3e3b5e35 authored by Dave Watson's avatar Dave Watson Committed by Noam Lerner

fix service memory leak

Summary:
This code is only used in a test so far.

Basically it looks like Pipeline has some dependency issues - any addBack() pipelines have to be deleted *after* the main pipeline is destroyed.  Ideally if the pipeline is already closed, the destruction order wouldn't matter.  There is currently no removeBack() call either.   This is a quick fix for the test to just delete stuff in the right order, we can discuss a better solution when @jsedgwick returns

Test Plan: fbconfig --sanitize=address --with-project-version=clang:3.5 --clang folly/wangle/service && fbmake runtests

Reviewed By: hans@fb.com

Subscribers: trunkagent, doug, fugalh, folly-diffs@, yfeldblum, jsedgwick

FB internal diff: D1903200

Tasks: 6415578

Signature: t1:1903200:1426528298:e109dcc0ec586a505a26cd95a6f20434d22cbd37
parent db66df3b
...@@ -45,7 +45,9 @@ class ServerAcceptor : public Acceptor { ...@@ -45,7 +45,9 @@ class ServerAcceptor : public Acceptor {
} }
void notifyPendingShutdown() {} void notifyPendingShutdown() {}
void closeWhenIdle() {} void closeWhenIdle() {}
void dropConnection() {} void dropConnection() {
delete this;
}
void dumpConnectionState(uint8_t loglevel) {} void dumpConnectionState(uint8_t loglevel) {}
private: private:
PipelinePtr pipeline_; PipelinePtr pipeline_;
......
...@@ -127,13 +127,14 @@ TEST(Wangle, ClientServerTest) { ...@@ -127,13 +127,14 @@ TEST(Wangle, ClientServerTest) {
server.bind(port); server.bind(port);
// client // client
ClientBootstrap<Pipeline> client; auto client = std::make_shared<ClientBootstrap<Pipeline>>();
ClientServiceFactory<Pipeline, std::string, std::string> serviceFactory; ClientServiceFactory<Pipeline, std::string, std::string> serviceFactory;
client.pipelineFactory( client->pipelineFactory(
std::make_shared<ClientPipelineFactory<std::string, std::string>>()); std::make_shared<ClientPipelineFactory<std::string, std::string>>());
SocketAddress addr("127.0.0.1", port); SocketAddress addr("127.0.0.1", port);
client.connect(addr); client->connect(addr);
auto service = serviceFactory(&client).value(); auto service = std::shared_ptr<Service<std::string, std::string>>(
serviceFactory(client.get()).value());
auto rep = (*service)("test"); auto rep = (*service)("test");
rep.then([&](std::string value) { rep.then([&](std::string value) {
...@@ -143,6 +144,7 @@ TEST(Wangle, ClientServerTest) { ...@@ -143,6 +144,7 @@ TEST(Wangle, ClientServerTest) {
}); });
EventBaseManager::get()->getEventBase()->loopForever(); EventBaseManager::get()->getEventBase()->loopForever();
server.stop(); server.stop();
client.reset();
} }
class AppendFilter : public Filter<std::string, std::string> { class AppendFilter : public Filter<std::string, std::string> {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment