8000 Use weak ptr also for proto ptr (#21693) · solisoft/arangodb@5e60226 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5e60226

Browse files
authored
Use weak ptr also for proto ptr (arangodb#21693)
1 parent 86f384b commit 5e60226

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

arangod/GeneralServer/AcceptorTcp.cpp

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ void AcceptorTcp<SocketType::Tcp>::asyncAccept() {
132132
auto& socket = asioSocket->socket;
133133
auto& peer = asioSocket->peer;
134134
auto handler = [self_ptr = weak_from_this(),
135-
asioSocket = std::move(asioSocket)](
136-
asio_ns::error_code const& ec) mutable {
135+
asioSocket](asio_ns::error_code const& ec) mutable {
137136
if (auto self = self_ptr.lock(); self != nullptr) {
138137
if (ec) {
139138
self->handleError(ec);
@@ -193,23 +192,26 @@ template<>
193192
void AcceptorTcp<SocketType::Ssl>::performHandshake(
194193
std::shared_ptr<AsioSocket<SocketType::Ssl>> proto) {
195194
// io_context is single-threaded, no sync needed
196-
auto* ptr = proto.get();
197195
proto->timer.expires_from_now(std::chrono::seconds(60));
198-
proto->timer.async_wait([ptr](asio_ns::error_code const& ec) {
199-
if (ec) { // canceled
200-
return;
201-
}
202-
ptr->shutdown([](asio_ns::error_code const&) {}); // ignore error
203-
});
196+
proto->timer.async_wait(
197+
[weak_ptr = std::weak_ptr<AsioSocket<SocketType::Ssl>>(proto)](
198+
asio_ns::error_code const& ec) {
199+
if (ec) { // canceled
200+
return;
201+
}
202+
if (auto ptr = weak_ptr.lock(); ptr != nullptr) {
203+
ptr->shutdown([](asio_ns::error_code const&) {}); // ignore error
204+
}
205+
});
204206

205207
auto cb = [self_ptr = weak_from_this(),
206-
as = std::move(proto)](asio_ns::error_code const& ec) mutable {
207-
as->timer.cancel();
208+
proto](asio_ns::error_code const& ec) mutable {
209+
proto->timer.cancel();
208210
if (auto self = self_ptr.lock(); self != nullptr) {
209211
if (ec) {
210212
LOG_TOPIC("4c6b4", DEBUG, arangodb::Logger::COMMUNICATION)
211213
<< "error during TLS handshake: '" << ec.message() << "'";
212-
as.reset(); // ungraceful shutdown
214+
proto.reset(); // ungraceful shutdown
213215
return;
214216
}
215217

@@ -221,22 +223,22 @@ void AcceptorTcp<SocketType::Ssl>::performHandshake(
221223
info.serverAddress = self->_endpoint->host();
222224
info.serverPort = self->_endpoint->port();
223225

224-
info.clientAddress = as->peer.address().to_string();
225-
info.clientPort = as->peer.port();
226+
info.clientAddress = proto->peer.address().to_string();
227+
info.clientPort = proto->peer.port();
226228

227229
std::shared_ptr<CommTask> task;
228-
if (tls_h2_negotiated(as->socket.native_handle())) {
230+
if (tls_h2_negotiated(proto->socket.native_handle())) {
229231
task = std::make_shared<H2CommTask<SocketType::Ssl>>(
230-
self->_server, std::move(info), std::move(as));
232+
self->_server, std::move(info), std::move(proto));
231233
} else {
232234
task = std::make_shared<HttpCommTask<SocketType::Ssl>>(
233-
self->_server, std::move(info), std::move(as));
235+
self->_server, std::move(info), std::move(proto));
234236
}
235237

236238
self->_server.registerTask(std::move(task));
237239
}
238240
};
239-
ptr->handshake(withLogContext(std::move(cb)));
241+
proto->handshake(withLogContext(std::move(cb)));
240242
}
241243

242244
template<>
@@ -251,8 +253,7 @@ void AcceptorTcp<SocketType::Ssl>::asyncAccept() {
251253
auto& socket = asioSocket->socket.lowest_layer();
252254
auto& peer = asioSocket->peer;
253255
auto handler = [self_ptr = weak_from_this(),
254-
asioSocket = std::move(asioSocket)](
255-
asio_ns::error_code const& ec) mutable {
256+
asioSocket](asio_ns::error_code const& ec) mutable {
256257
if (auto self = self_ptr.lock(); self != nullptr) {
257258
if (ec) {
258259
self->handleError(ec);

0 commit comments

Comments
 (0)
0