mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 03:55:32 +00: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)
|
||||
: mutex(mutex)
|
||||
, name(name)
|
||||
, waiters(0)
|
||||
, signaled(0)
|
||||
, waiters(0)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
|
|
@ -29,12 +29,12 @@ struct sys_event_flag_attr
|
|||
|
||||
struct event_flag_t
|
||||
{
|
||||
std::atomic<u64> flags;
|
||||
|
||||
const u32 protocol;
|
||||
const s32 type;
|
||||
const u64 name;
|
||||
|
||||
std::atomic<u64> flags;
|
||||
|
||||
// TODO: use sleep queue, possibly remove condition variable
|
||||
std::condition_variable cv;
|
||||
std::atomic<s32> waiters;
|
||||
|
|
|
@ -30,6 +30,9 @@ struct lwcond_t
|
|||
|
||||
lwcond_t(u64 name)
|
||||
: name(name)
|
||||
, signaled1(0)
|
||||
, signaled2(0)
|
||||
, waiters(0)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
|
|
@ -143,6 +143,11 @@ s32 _sys_lwmutex_unlock(u32 lwmutex_id)
|
|||
return CELL_ESRCH;
|
||||
}
|
||||
|
||||
if (mutex->signaled)
|
||||
{
|
||||
sys_lwmutex.Fatal("_sys_lwmutex_unlock(lwmutex_id=%d): already signaled", lwmutex_id);
|
||||
}
|
||||
|
||||
mutex->signaled++;
|
||||
mutex->cv.notify_one();
|
||||
|
||||
|
|
|
@ -81,6 +81,8 @@ struct lwmutex_t
|
|||
lwmutex_t(u32 protocol, u64 name)
|
||||
: protocol(protocol)
|
||||
, name(name)
|
||||
, signaled(0)
|
||||
, waiters(0)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue