mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-08-06 00:00:04 +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)
|
format_enum(out, arg, [](auto error)
|
||||||
{
|
{
|
||||||
switch (s32 _error = error)
|
switch (static_cast<s32>(error))
|
||||||
{
|
{
|
||||||
#define SYS_NET_ERROR_CASE(x) \
|
#define SYS_NET_ERROR_CASE(x) \
|
||||||
case -x: return "-" #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_STREAM:
|
||||||
case SYS_NET_SOCK_DGRAM:
|
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;
|
break;
|
||||||
case SYS_NET_SOCK_DGRAM_P2P:
|
case SYS_NET_SOCK_DGRAM_P2P:
|
||||||
case SYS_NET_SOCK_STREAM_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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -85,8 +85,17 @@ namespace np
|
||||||
void init_np_handler_dependencies();
|
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()
|
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());
|
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)
|
for (ppu_thread* ppu : ppu_to_awake)
|
||||||
{
|
{
|
||||||
|
@ -117,7 +126,10 @@ void network_thread::operator()()
|
||||||
std::vector<std::shared_ptr<lv2_socket>> socklist;
|
std::vector<std::shared_ptr<lv2_socket>> socklist;
|
||||||
socklist.reserve(lv2_socket::id_count);
|
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);
|
std::vector<::pollfd> fds(lv2_socket::id_count);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
|
@ -9,8 +9,10 @@
|
||||||
|
|
||||||
struct base_network_thread
|
struct base_network_thread
|
||||||
{
|
{
|
||||||
|
shared_mutex mutex_ppu_to_awake;
|
||||||
std::vector<ppu_thread*> ppu_to_awake;
|
std::vector<ppu_thread*> ppu_to_awake;
|
||||||
|
|
||||||
|
void queue_ppu_wake(ppu_thread* ppu);
|
||||||
void wake_threads();
|
void wake_threads();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue