This commit is contained in:
Nekotekina 2015-03-11 13:39:54 +03:00
parent 0a4820f4f8
commit a19a13136c
5 changed files with 13 additions and 3 deletions

View file

@ -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)
{
}
};

View file

@ -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;

View file

@ -30,6 +30,9 @@ struct lwcond_t
lwcond_t(u64 name)
: name(name)
, signaled1(0)
, signaled2(0)
, waiters(0)
{
}
};

View file

@ -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();

View file

@ -81,6 +81,8 @@ struct lwmutex_t
lwmutex_t(u32 protocol, u64 name)
: protocol(protocol)
, name(name)
, signaled(0)
, waiters(0)
{
}
};