cellGem: move some locks around wait loops

This commit is contained in:
Megamouse 2025-01-21 05:34:16 +01:00
parent fcac6a9322
commit fbc7ad6788

View File

@ -2440,7 +2440,7 @@ error_code cellGemEnd(ppu_thread& ppu)
auto& gem = g_fxo->get<gem_config>(); auto& gem = g_fxo->get<gem_config>();
std::scoped_lock lock(gem.mtx); std::unique_lock lock(gem.mtx);
if (gem.state.compare_and_swap_test(1, 0)) if (gem.state.compare_and_swap_test(1, 0))
{ {
@ -2452,6 +2452,8 @@ error_code cellGemEnd(ppu_thread& ppu)
return CELL_OK; return CELL_OK;
} }
lock.unlock();
auto& tracker = g_fxo->get<named_thread<gem_tracker>>(); auto& tracker = g_fxo->get<named_thread<gem_tracker>>();
if (!tracker.wait_for_tracker_result(ppu)) if (!tracker.wait_for_tracker_result(ppu))
{ {
@ -2488,7 +2490,7 @@ error_code cellGemFilterState(u32 gem_num, u32 enable)
error_code cellGemForceRGB(u32 gem_num, f32 r, f32 g, f32 b) error_code cellGemForceRGB(u32 gem_num, f32 r, f32 g, f32 b)
{ {
cellGem.todo("cellGemForceRGB(gem_num=%d, r=%f, g=%f, b=%f)", gem_num, r, g, b); cellGem.warning("cellGemForceRGB(gem_num=%d, r=%f, g=%f, b=%f)", gem_num, r, g, b);
auto& gem = g_fxo->get<gem_config>(); auto& gem = g_fxo->get<gem_config>();
@ -3557,8 +3559,6 @@ error_code cellGemUpdateFinish(ppu_thread& ppu)
return CELL_GEM_ERROR_UNINITIALIZED; return CELL_GEM_ERROR_UNINITIALIZED;
} }
std::scoped_lock lock(gem.mtx);
if (!gem.updating) if (!gem.updating)
{ {
return CELL_GEM_ERROR_UPDATE_NOT_STARTED; return CELL_GEM_ERROR_UPDATE_NOT_STARTED;
@ -3570,6 +3570,8 @@ error_code cellGemUpdateFinish(ppu_thread& ppu)
return {}; return {};
} }
std::scoped_lock lock(gem.mtx);
gem.updating = false; gem.updating = false;
if (!gem.camera_frame) if (!gem.camera_frame)