mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-11 01:08:39 +12:00
Bugfix
This commit is contained in:
parent
0a4820f4f8
commit
a19a13136c
5 changed files with 13 additions and 3 deletions
|
@ -29,8 +29,8 @@ struct cond_t
|
||||||
cond_t(std::shared_ptr<mutex_t>& mutex, u64 name)
|
cond_t(std::shared_ptr<mutex_t>& mutex, u64 name)
|
||||||
: mutex(mutex)
|
: mutex(mutex)
|
||||||
, name(name)
|
, name(name)
|
||||||
, waiters(0)
|
|
||||||
, signaled(0)
|
, signaled(0)
|
||||||
|
, waiters(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,12 +29,12 @@ struct sys_event_flag_attr
|
||||||
|
|
||||||
struct event_flag_t
|
struct event_flag_t
|
||||||
{
|
{
|
||||||
std::atomic<u64> flags;
|
|
||||||
|
|
||||||
const u32 protocol;
|
const u32 protocol;
|
||||||
const s32 type;
|
const s32 type;
|
||||||
const u64 name;
|
const u64 name;
|
||||||
|
|
||||||
|
std::atomic<u64> flags;
|
||||||
|
|
||||||
// TODO: use sleep queue, possibly remove condition variable
|
// TODO: use sleep queue, possibly remove condition variable
|
||||||
std::condition_variable cv;
|
std::condition_variable cv;
|
||||||
std::atomic<s32> waiters;
|
std::atomic<s32> waiters;
|
||||||
|
|
|
@ -30,6 +30,9 @@ struct lwcond_t
|
||||||
|
|
||||||
lwcond_t(u64 name)
|
lwcond_t(u64 name)
|
||||||
: name(name)
|
: name(name)
|
||||||
|
, signaled1(0)
|
||||||
|
, signaled2(0)
|
||||||
|
, waiters(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -143,6 +143,11 @@ s32 _sys_lwmutex_unlock(u32 lwmutex_id)
|
||||||
return CELL_ESRCH;
|
return CELL_ESRCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mutex->signaled)
|
||||||
|
{
|
||||||
|
sys_lwmutex.Fatal("_sys_lwmutex_unlock(lwmutex_id=%d): already signaled", lwmutex_id);
|
||||||
|
}
|
||||||
|
|
||||||
mutex->signaled++;
|
mutex->signaled++;
|
||||||
mutex->cv.notify_one();
|
mutex->cv.notify_one();
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,8 @@ struct lwmutex_t
|
||||||
lwmutex_t(u32 protocol, u64 name)
|
lwmutex_t(u32 protocol, u64 name)
|
||||||
: protocol(protocol)
|
: protocol(protocol)
|
||||||
, name(name)
|
, name(name)
|
||||||
|
, signaled(0)
|
||||||
|
, waiters(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue