: conn{_conn}
{}
+FrameAssemblerV2::~FrameAssemblerV2()
+{
+ if (has_socket()) {
+ std::ignore = move_socket();
+ }
+}
+
#ifdef UNIT_TESTS_BUILT
// should be consistent to intercept() in ProtocolV2.cc
void FrameAssemblerV2::intercept_frame(Tag tag, bool is_write)
FrameAssemblerV2::to_replace()
{
assert(is_socket_valid());
- socket = nullptr;
return mover_t{
- std::move(conn.socket),
+ move_socket(),
std::move(session_stream_handlers),
std::move(session_comp_handlers)};
}
return has_socket() && !socket->is_shutdown();
}
+SocketRef FrameAssemblerV2::move_socket()
+{
+ assert(has_socket());
+ conn.set_socket(nullptr);
+ return std::move(socket);
+}
+
void FrameAssemblerV2::set_socket(SocketRef &&new_socket)
{
assert(!has_socket());
- socket = new_socket.get();
- conn.socket = std::move(new_socket);
+ socket = std::move(new_socket);
+ conn.set_socket(socket.get());
assert(is_socket_valid());
}
{
assert(has_socket());
assert(socket->is_shutdown());
- socket = nullptr;
- auto old_socket = std::move(conn.socket);
+ auto old_socket = move_socket();
set_socket(std::move(new_socket));
return old_socket->close(
).then([sock = std::move(old_socket)] {});
public:
FrameAssemblerV2(SocketConnection &conn);
- ~FrameAssemblerV2() = default;
+ ~FrameAssemblerV2();
FrameAssemblerV2(const FrameAssemblerV2 &) = delete;
private:
bool has_socket() const;
+ SocketRef move_socket();
+
void log_main_preamble(const ceph::bufferlist &bl);
#ifdef UNIT_TESTS_BUILT
SocketConnection &conn;
- Socket *socket = nullptr;
+ SocketRef socket;
/*
* auth signature
bp_type_t type,
SocketConnection& conn,
Interceptor *interceptor,
- SocketRef& socket) {
+ Socket *socket) {
if (interceptor) {
auto action = interceptor->intercept(conn, Breakpoint(bp));
socket->set_trap(type, action, &interceptor->blocker);
std::unique_ptr<ProtocolV2> protocol;
- SocketRef socket;
+ Socket *socket = nullptr;
entity_name_t peer_name = {0, entity_name_t::NEW};
features = f;
}
+ void set_socket(Socket *s);
+
#ifdef UNIT_TESTS_BUILT
bool is_closed_clean() const override;