mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-15 09:40:05 +00:00
Set group status INIT on last thread stopped
this fixes the group status after sys_spu_thread_exit when not joining the spu group
This commit is contained in:
parent
7c74bafaf3
commit
653a4ef0df
@ -486,9 +486,13 @@ void spu_thread::cpu_stop()
|
||||
{
|
||||
if (verify(HERE, group->running--) == 1)
|
||||
{
|
||||
{
|
||||
group->stop_count++;
|
||||
std::lock_guard lock(group->mutex);
|
||||
group->run_state = SPU_THREAD_GROUP_STATUS_INITIALIZED;
|
||||
}
|
||||
|
||||
// Notify on last thread stopped
|
||||
group->stop_count++;
|
||||
group->mutex.lock_unlock();
|
||||
group->cond.notify_all();
|
||||
}
|
||||
}
|
||||
@ -2359,7 +2363,6 @@ bool spu_thread::stop_and_signal(u32 code)
|
||||
}
|
||||
}
|
||||
|
||||
group->run_state = SPU_THREAD_GROUP_STATUS_INITIALIZED;
|
||||
group->exit_status = value;
|
||||
group->join_state |= SPU_TGJSF_GROUP_EXIT;
|
||||
|
||||
|
@ -329,12 +329,6 @@ error_code sys_spu_thread_group_destroy(u32 id)
|
||||
|
||||
const auto group = idm::withdraw<lv2_spu_group>(id, [](lv2_spu_group& group) -> CellError
|
||||
{
|
||||
if (group.running)
|
||||
{
|
||||
// Cannot destroy while threads are running
|
||||
return CELL_EBUSY;
|
||||
}
|
||||
|
||||
const auto _old = group.run_state.compare_and_swap(SPU_THREAD_GROUP_STATUS_INITIALIZED, SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED);
|
||||
|
||||
if (_old > SPU_THREAD_GROUP_STATUS_INITIALIZED)
|
||||
@ -375,12 +369,6 @@ error_code sys_spu_thread_group_start(ppu_thread& ppu, u32 id)
|
||||
|
||||
const auto group = idm::get<lv2_spu_group>(id, [](lv2_spu_group& group)
|
||||
{
|
||||
if (group.running)
|
||||
{
|
||||
// Can't start while threads are (still) running
|
||||
return false;
|
||||
}
|
||||
|
||||
// SPU_THREAD_GROUP_STATUS_READY state is not used
|
||||
return group.run_state.compare_and_swap_test(SPU_THREAD_GROUP_STATUS_INITIALIZED, SPU_THREAD_GROUP_STATUS_RUNNING);
|
||||
});
|
||||
@ -618,7 +606,6 @@ error_code sys_spu_thread_group_terminate(u32 id, s32 value)
|
||||
}
|
||||
}
|
||||
|
||||
group->run_state = SPU_THREAD_GROUP_STATUS_INITIALIZED;
|
||||
group->exit_status = value;
|
||||
group->join_state |= SPU_TGJSF_TERMINATED;
|
||||
|
||||
@ -680,7 +667,6 @@ error_code sys_spu_thread_group_join(ppu_thread& ppu, u32 id, vm::ptr<u32> cause
|
||||
join_state = group->join_state;
|
||||
exit_value = group->exit_status;
|
||||
group->join_state &= ~SPU_TGJSF_IS_JOINING;
|
||||
group->run_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; // hack
|
||||
}
|
||||
|
||||
if (ppu.test_stopped())
|
||||
|
Loading…
x
Reference in New Issue
Block a user