Remove lv2_socket_native destructor

This commit is contained in:
Elad 2024-12-24 15:15:20 +02:00
parent 6a4b9430c0
commit d376ba5994
6 changed files with 28 additions and 22 deletions

View file

@ -175,3 +175,14 @@ void lv2_socket::queue_wake(ppu_thread* ppu)
break; break;
} }
} }
lv2_socket& lv2_socket::operator=(thread_state s) noexcept
{
if (s == thread_state::finished)
{
close();
}
return *this;
}

View file

@ -27,6 +27,8 @@ using socket_type = uptr;
using socket_type = int; using socket_type = int;
#endif #endif
enum class thread_state : u32;
class lv2_socket class lv2_socket
{ {
public: public:
@ -62,7 +64,8 @@ public:
lv2_socket(utils::serial&, lv2_socket_type type); lv2_socket(utils::serial&, lv2_socket_type type);
static std::function<void(void*)> load(utils::serial& ar); static std::function<void(void*)> load(utils::serial& ar);
void save(utils::serial&, bool save_only_this_class = false); void save(utils::serial&, bool save_only_this_class = false);
virtual ~lv2_socket() = default; ~lv2_socket() noexcept = default;
lv2_socket& operator=(thread_state s) noexcept;
std::unique_lock<shared_mutex> lock(); std::unique_lock<shared_mutex> lock();

View file

@ -57,19 +57,6 @@ void lv2_socket_native::save(utils::serial& ar)
ar(is_socket_connected()); ar(is_socket_connected());
} }
lv2_socket_native::~lv2_socket_native()
{
std::lock_guard lock(mutex);
if (socket)
{
#ifdef _WIN32
::closesocket(socket);
#else
::close(socket);
#endif
}
}
s32 lv2_socket_native::create_socket() s32 lv2_socket_native::create_socket()
{ {
ensure(family == SYS_NET_AF_INET); ensure(family == SYS_NET_AF_INET);
@ -1114,10 +1101,12 @@ void lv2_socket_native::close()
socket = {}; socket = {};
} }
auto& dnshook = g_fxo->get<np::dnshook>(); if (auto dnshook = g_fxo->try_get<np::dnshook>())
dnshook.remove_dns_spy(lv2_id); {
dnshook->remove_dns_spy(lv2_id);
}
if (bound_port) if (bound_port && g_fxo->is_init<named_thread<np::np_handler>>())
{ {
auto& nph = g_fxo->get<named_thread<np::np_handler>>(); auto& nph = g_fxo->get<named_thread<np::np_handler>>();
nph.upnp_remove_port_mapping(bound_port, type == SYS_NET_SOCK_STREAM ? "TCP" : "UDP"); nph.upnp_remove_port_mapping(bound_port, type == SYS_NET_SOCK_STREAM ? "TCP" : "UDP");

View file

@ -35,7 +35,6 @@ public:
lv2_socket_native(lv2_socket_family family, lv2_socket_type type, lv2_ip_protocol protocol); lv2_socket_native(lv2_socket_family family, lv2_socket_type type, lv2_ip_protocol protocol);
lv2_socket_native(utils::serial& ar, lv2_socket_type type); lv2_socket_native(utils::serial& ar, lv2_socket_type type);
void save(utils::serial& ar); void save(utils::serial& ar);
~lv2_socket_native();
s32 create_socket(); s32 create_socket();
std::tuple<bool, s32, shared_ptr<lv2_socket>, sys_net_sockaddr> accept(bool is_lock = true) override; std::tuple<bool, s32, shared_ptr<lv2_socket>, sys_net_sockaddr> accept(bool is_lock = true) override;

View file

@ -330,8 +330,9 @@ void lv2_socket_p2p::close()
return; return;
} }
auto& nc = g_fxo->get<p2p_context>(); if (g_fxo->is_init<p2p_context>())
{ {
auto& nc = g_fxo->get<p2p_context>();
std::lock_guard lock(nc.list_p2p_ports_mutex); std::lock_guard lock(nc.list_p2p_ports_mutex);
if (!nc.list_p2p_ports.contains(port)) if (!nc.list_p2p_ports.contains(port))

View file

@ -944,8 +944,9 @@ void lv2_socket_p2ps::close()
return; return;
} }
auto& nc = g_fxo->get<p2p_context>(); if (g_fxo->is_init<p2p_context>())
{ {
auto& nc = g_fxo->get<p2p_context>();
std::lock_guard lock(nc.list_p2p_ports_mutex); std::lock_guard lock(nc.list_p2p_ports_mutex);
auto& p2p_port = ::at32(nc.list_p2p_ports, port); auto& p2p_port = ::at32(nc.list_p2p_ports, port);
{ {
@ -973,8 +974,10 @@ void lv2_socket_p2ps::close()
} }
} }
auto& tcpm = g_fxo->get<named_thread<tcp_timeout_monitor>>(); if (const auto tcpm = g_fxo->try_get<named_thread<tcp_timeout_monitor>>())
tcpm.clear_all_messages(lv2_id); {
tcpm->clear_all_messages(lv2_id);
}
} }
s32 lv2_socket_p2ps::shutdown([[maybe_unused]] s32 how) s32 lv2_socket_p2ps::shutdown([[maybe_unused]] s32 how)