sys_net: Add mutex to protect ppu_to_awake

This commit is contained in:
RipleyTom 2024-11-18 14:14:23 +01:00
parent cc86e01df9
commit b743186947
No known key found for this signature in database
GPG key ID: FC2B5DEF76BF4CC8
4 changed files with 18 additions and 4 deletions

View file

@ -54,7 +54,7 @@ void fmt_class_string<sys_net_error>::format(std::string& out, u64 arg)
{
format_enum(out, arg, [](auto error)
{
switch (s32 _error = error)
switch (static_cast<s32>(error))
{
#define SYS_NET_ERROR_CASE(x) \
case -x: return "-" #x; \

View file

@ -165,11 +165,11 @@ void lv2_socket::queue_wake(ppu_thread* ppu)
{
case SYS_NET_SOCK_STREAM:
case SYS_NET_SOCK_DGRAM:
g_fxo->get<network_context>().ppu_to_awake.emplace_back(ppu);
g_fxo->get<network_context>().queue_ppu_wake(ppu);
break;
case SYS_NET_SOCK_DGRAM_P2P:
case SYS_NET_SOCK_STREAM_P2P:
g_fxo->get<p2p_context>().ppu_to_awake.emplace_back(ppu);
g_fxo->get<p2p_context>().queue_ppu_wake(ppu);
break;
default:
break;

View file

@ -85,8 +85,17 @@ namespace np
void init_np_handler_dependencies();
}
void base_network_thread::queue_ppu_wake(ppu_thread* ppu)
{
std::lock_guard lock(mutex_ppu_to_awake);
ppu_to_awake.emplace_back(ppu);
}
void base_network_thread::wake_threads()
{
std::lock_guard lock(mutex_ppu_to_awake);
ppu_to_awake.erase(std::unique(ppu_to_awake.begin(), ppu_to_awake.end()), ppu_to_awake.end());
for (ppu_thread* ppu : ppu_to_awake)
{
@ -117,7 +126,10 @@ void network_thread::operator()()
std::vector<std::shared_ptr<lv2_socket>> socklist;
socklist.reserve(lv2_socket::id_count);
ppu_to_awake.clear();
{
std::lock_guard lock(mutex_ppu_to_awake);
ppu_to_awake.clear();
}
std::vector<::pollfd> fds(lv2_socket::id_count);
#ifdef _WIN32

View file

@ -9,8 +9,10 @@
struct base_network_thread
{
shared_mutex mutex_ppu_to_awake;
std::vector<ppu_thread*> ppu_to_awake;
void queue_ppu_wake(ppu_thread* ppu);
void wake_threads();
};