mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
sys_net: Add mutex to protect ppu_to_awake
This commit is contained in:
parent
cc86e01df9
commit
b743186947
4 changed files with 18 additions and 4 deletions
|
@ -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; \
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue