Skip to content

Commit 97be0f3

Browse files
committed
Merge pull request #47 from DICL/fix-dfsrm
The bug was that when client disconnect, socket pointer was not freed
2 parents 9e7d0a5 + e7985c6 commit 97be0f3

File tree

4 files changed

+17
-1
lines changed

4 files changed

+17
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ m4/ltoptions.m4
4646
m4/ltsugar.m4
4747
m4/ltversion.m4
4848
m4/lt~obsolete.m4
49+
m4/pkg.m4

src/fs/dfsrm.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ int main(int argc, char* argv[])
9898

9999
send_message(socket, &fr);
100100
auto fd = read_fd(socket);
101+
socket->close();
102+
delete socket;
101103

102104
unsigned int block_seq = 0;
103105
for (auto block_name : fd->nodes) {
@@ -110,19 +112,29 @@ int main(int argc, char* argv[])
110112
auto msg = read_reply(tmp_socket);
111113
if (msg->message != "OK") {
112114
cerr << "[ERROR]: block " << block_name << "doesn't exist" << endl;
115+
delete msg;
113116
return EXIT_FAILURE;
114117
}
118+
delete msg;
119+
115120
tmp_socket->close();
121+
delete tmp_socket;
116122
}
123+
delete fd;
117124

118125
FileDel file_del;
119126
file_del.file_name = file_name;
127+
socket = connect(file_hash_key);
120128
send_message(socket, &file_del);
121129
auto reply = read_reply(socket);
122130
if (reply->message != "OK") {
123131
cerr << "[ERROR]: file " << file_name << " does not exist" << endl;
132+
delete reply;
124133
return EXIT_FAILURE;
125134
}
135+
delete reply;
136+
socket->close();
137+
delete socket;
126138
/*
127139
if (reply->message != "OK") {
128140
{

src/network/server.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ void Server::do_connect () {
2424
// }}}
2525
// on_accept {{{
2626
void Server::on_accept (tcp::socket* sock) {
27+
if (server != nullptr) delete server;
2728
server = sock;
2829
do_read();
2930
}
@@ -89,6 +90,8 @@ void Server::read_coroutine (yield_context yield) {
8990
if (ec == boost::asio::error::eof) {
9091
logger->info ("Closing server socket to client");
9192
server->close();
93+
delete server;
94+
server = nullptr;
9295
node->on_disconnect();
9396
} else {
9497
logger->info ("Message arrived error=%s",

src/network/server.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class Server: public AsyncChannel {
2626
void do_read ();
2727
void read_coroutine (boost::asio::yield_context);
2828

29-
tcp::socket *server;
29+
tcp::socket *server = nullptr;
3030
tcp::endpoint* endpoint = nullptr;
3131
};
3232

0 commit comments

Comments
 (0)