Bugfix
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user