From 5e143100717dbc32f6af131309770ea940081d80 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Wed, 19 Aug 2015 14:04:58 +0300 Subject: [PATCH] noexcept usage fixed thread_t renamed to named_thread_t --- Utilities/File.h | 2 +- Utilities/GNU.h | 5 ---- Utilities/SleepQueue.cpp | 2 +- Utilities/SleepQueue.h | 2 +- Utilities/Thread.cpp | 17 +++++++------- Utilities/Thread.h | 24 ++++++++++---------- rpcs3/Emu/ARMv7/ARMv7Thread.cpp | 2 +- rpcs3/Emu/CPU/CPUThread.cpp | 5 ---- rpcs3/Emu/CPU/CPUThread.h | 10 ++++---- rpcs3/Emu/Cell/PPULLVMRecompiler.h | 2 +- rpcs3/Emu/Cell/PPUThread.cpp | 2 +- rpcs3/Emu/Cell/RawSPUThread.cpp | 6 ++--- rpcs3/Emu/Cell/SPUThread.cpp | 10 ++------ rpcs3/Emu/Memory/vm.cpp | 23 ++++++++++++++++--- rpcs3/Emu/Memory/vm.h | 13 +++++++---- rpcs3/Emu/Memory/vm_var.h | 17 ++++++-------- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 5 ---- rpcs3/Emu/RSX/GSRender.h | 4 ---- rpcs3/Emu/RSX/Null/NullGSRender.h | 4 ---- rpcs3/Emu/RSX/RSXThread.h | 6 +---- rpcs3/Emu/SysCalls/Modules/cellAudio.h | 2 +- rpcs3/Emu/SysCalls/Modules/cellFs.cpp | 4 ++-- rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp | 2 +- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 5 +++- rpcs3/Emu/SysCalls/lv2/sys_fs.h | 2 +- rpcs3/Emu/SysCalls/lv2/sys_timer.h | 2 +- 26 files changed, 82 insertions(+), 96 deletions(-) diff --git a/Utilities/File.h b/Utilities/File.h index fd84e5197e..dd21db3797 100644 --- a/Utilities/File.h +++ b/Utilities/File.h @@ -64,7 +64,7 @@ namespace fs struct file final { - using handle_type = intptr_t; + using handle_type = std::intptr_t; static const handle_type null = -1; diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 26c3465deb..2e79a8dd8a 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -2,11 +2,6 @@ #include -// temporarily (until noexcept is available); use `noexcept(true)` instead of `noexcept` if necessary -#if defined(_MSC_VER) && _MSC_VER <= 1800 -#define noexcept _NOEXCEPT_OP -#endif - #if defined(_MSC_VER) && _MSC_VER <= 1800 #define thread_local __declspec(thread) #elif __APPLE__ diff --git a/Utilities/SleepQueue.cpp b/Utilities/SleepQueue.cpp index f7a991fb06..9847203328 100644 --- a/Utilities/SleepQueue.cpp +++ b/Utilities/SleepQueue.cpp @@ -48,7 +48,7 @@ sleep_queue_entry_t::sleep_queue_entry_t(CPUThread& cpu, sleep_queue_t& queue, c cpu.sleep(); } -sleep_queue_entry_t::~sleep_queue_entry_t() noexcept(false) +sleep_queue_entry_t::~sleep_queue_entry_t() { remove_entry(); m_thread.awake(); diff --git a/Utilities/SleepQueue.h b/Utilities/SleepQueue.h index e468b3823e..ad6404e4fe 100644 --- a/Utilities/SleepQueue.h +++ b/Utilities/SleepQueue.h @@ -24,7 +24,7 @@ public: sleep_queue_entry_t(CPUThread& cpu, sleep_queue_t& queue, const defer_sleep_t&); // removes specified thread from the sleep queue if added - ~sleep_queue_entry_t() noexcept(false); + ~sleep_queue_entry_t(); // add thread to the sleep queue inline void enter() diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index 1fce7d4762..5c6757c131 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -1199,20 +1199,21 @@ std::string thread_ctrl_t::get_name() const return name(); } -thread_t::thread_t(std::function name, std::function func) +named_thread_t::named_thread_t(std::function name, std::function func) { start(std::move(name), func); } -thread_t::~thread_t() //noexcept(false) +named_thread_t::~named_thread_t() { if (m_thread) { - throw EXCEPTION("Neither joined nor detached"); + std::printf("Fatal: thread '%s' is neither joined nor detached\n", this->get_name().c_str()); + std::terminate(); } } -std::string thread_t::get_name() const +std::string named_thread_t::get_name() const { if (!m_thread) { @@ -1229,7 +1230,7 @@ std::string thread_t::get_name() const std::atomic g_thread_count{ 0 }; -void thread_t::start(std::function name, std::function func) +void named_thread_t::start(std::function name, std::function func) { if (m_thread) { @@ -1302,7 +1303,7 @@ void thread_t::start(std::function name, std::function fu }, m_thread, std::move(func)); } -void thread_t::detach() +void named_thread_t::detach() { if (!m_thread) { @@ -1324,7 +1325,7 @@ void thread_t::detach() ctrl->m_thread.detach(); } -void thread_t::join() +void named_thread_t::join() { if (!m_thread) { @@ -1349,7 +1350,7 @@ void thread_t::join() ctrl->m_thread.join(); } -bool thread_t::is_current() const +bool named_thread_t::is_current() const { if (!m_thread) { diff --git a/Utilities/Thread.h b/Utilities/Thread.h index 2e3f5a5c09..6b21b86bb4 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -5,7 +5,7 @@ const class thread_ctrl_t* get_current_thread_ctrl(); // named thread control class class thread_ctrl_t final { - friend class thread_t; + friend class named_thread_t; // thread handler std::thread m_thread; @@ -23,7 +23,7 @@ public: std::string get_name() const; }; -class thread_t +class named_thread_t { // pointer to managed resource (shared with actual thread) std::shared_ptr m_thread; @@ -37,17 +37,17 @@ public: public: // initialize in empty state - thread_t() = default; + named_thread_t() = default; // create named thread - thread_t(std::function name, std::function func); + named_thread_t(std::function name, std::function func); - // destructor, joins automatically (questionable, don't rely on this functionality in derived destructors) - virtual ~thread_t() /*noexcept(false) compile error on osx*/; + // destructor, will terminate if thread is neither joined nor detached + virtual ~named_thread_t(); - thread_t(const thread_t&) = delete; + named_thread_t(const named_thread_t&) = delete; - thread_t& operator =(const thread_t&) = delete; + named_thread_t& operator =(const named_thread_t&) = delete; public: // get thread name @@ -72,11 +72,11 @@ public: const thread_ctrl_t* get_thread_ctrl() const { return m_thread.get(); } }; -class autojoin_thread_t final : private thread_t +class autojoin_thread_t final : private named_thread_t { public: - using thread_t::mutex; - using thread_t::cv; + using named_thread_t::mutex; + using named_thread_t::cv; public: autojoin_thread_t() = delete; @@ -91,7 +91,7 @@ public: join(); } - using thread_t::is_current; + using named_thread_t::is_current; }; extern const std::function SQUEUE_ALWAYS_EXIT; diff --git a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp index 17143532e8..3f72c08dcd 100644 --- a/rpcs3/Emu/ARMv7/ARMv7Thread.cpp +++ b/rpcs3/Emu/ARMv7/ARMv7Thread.cpp @@ -141,7 +141,7 @@ void ARMv7Thread::close_stack() { if (stack_addr) { - vm::dealloc(stack_addr, vm::main); + vm::dealloc_verbose_nothrow(stack_addr, vm::main); stack_addr = 0; } } diff --git a/rpcs3/Emu/CPU/CPUThread.cpp b/rpcs3/Emu/CPU/CPUThread.cpp index 136532bd7a..035c911382 100644 --- a/rpcs3/Emu/CPU/CPUThread.cpp +++ b/rpcs3/Emu/CPU/CPUThread.cpp @@ -71,11 +71,6 @@ CPUThread::CPUThread(CPUThreadType type, const std::string& name, std::function< CPUThread::~CPUThread() { - if (joinable()) - { - throw EXCEPTION("Thread not joined"); - } - SendDbgCommand(DID_REMOVE_THREAD, this); } diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 9f3a686450..57d821e01a 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -36,14 +36,14 @@ class CPUThreadExit {}; class CPUDecoder; -class CPUThread : public thread_t, public std::enable_shared_from_this +class CPUThread : public named_thread_t, public std::enable_shared_from_this { - using thread_t::start; + using named_thread_t::start; protected: - using thread_t::detach; - using thread_t::join; - using thread_t::joinable; + using named_thread_t::detach; + using named_thread_t::join; + using named_thread_t::joinable; atomic_t m_state; // thread state flags diff --git a/rpcs3/Emu/Cell/PPULLVMRecompiler.h b/rpcs3/Emu/Cell/PPULLVMRecompiler.h index 3611dc9096..f599b9c7fd 100644 --- a/rpcs3/Emu/Cell/PPULLVMRecompiler.h +++ b/rpcs3/Emu/Cell/PPULLVMRecompiler.h @@ -1003,7 +1003,7 @@ namespace ppu_recompiler_llvm { * It then builds them asynchroneously and update the executable mapping * using atomic based locks to avoid undefined behavior. **/ - class RecompilationEngine final : protected thread_t { + class RecompilationEngine final : protected named_thread_t { friend class CPUHybridDecoderRecompiler; public: virtual ~RecompilationEngine() override; diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index cfbd0012c3..a8a98abf98 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -139,7 +139,7 @@ void PPUThread::close_stack() { if (stack_addr) { - vm::dealloc(stack_addr, vm::stack); + vm::dealloc_verbose_nothrow(stack_addr, vm::stack); stack_addr = 0; } } diff --git a/rpcs3/Emu/Cell/RawSPUThread.cpp b/rpcs3/Emu/Cell/RawSPUThread.cpp index 8dd9614ee4..90e2b3654d 100644 --- a/rpcs3/Emu/Cell/RawSPUThread.cpp +++ b/rpcs3/Emu/Cell/RawSPUThread.cpp @@ -21,10 +21,8 @@ RawSPUThread::~RawSPUThread() { join(); - if (!vm::dealloc(offset)) - { - throw EXCEPTION("Failed to deallocate RawSPU local storage"); - } + // Deallocate Local Storage + vm::dealloc_verbose_nothrow(offset); } bool RawSPUThread::read_reg(const u32 addr, u32& value) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 5f0b069963..71269a9af8 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -106,14 +106,8 @@ SPUThread::~SPUThread() { join(); - if (!vm::dealloc(offset, vm::main)) - { - throw EXCEPTION("Failed to deallocate SPU local storage"); - } - } - else if (joinable()) - { - throw EXCEPTION("Thread not joined"); + // Deallocate Local Storage + vm::dealloc_verbose_nothrow(offset, vm::main); } } diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index f5d0791774..1bdb95915e 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -154,7 +154,7 @@ namespace vm std::mutex g_waiter_list_mutex; - waiter_t* _add_waiter(thread_t& thread, u32 addr, u32 size) + waiter_t* _add_waiter(named_thread_t& thread, u32 addr, u32 size) { std::lock_guard lock(g_waiter_list_mutex); @@ -248,7 +248,7 @@ namespace vm return true; } - waiter_lock_t::waiter_lock_t(thread_t& thread, u32 addr, u32 size) + waiter_lock_t::waiter_lock_t(named_thread_t& thread, u32 addr, u32 size) : m_waiter(_add_waiter(thread, addr, size)) , m_lock(thread.mutex, std::adopt_lock) // must be locked in _add_waiter { @@ -346,7 +346,7 @@ namespace vm void start() { // start notification thread - thread_t(COPY_EXPR("vm::start thread"), []() + named_thread_t(COPY_EXPR("vm::start thread"), []() { while (!Emu.IsStopped()) { @@ -766,6 +766,23 @@ namespace vm return block->dealloc(addr); } + void dealloc_verbose_nothrow(u32 addr, memory_location_t location) noexcept + { + const auto block = get(location, addr); + + if (!block) + { + LOG_ERROR(MEMORY, "%s(): invalid memory location (%d, addr=0x%x)\n", __func__, location, addr); + return; + } + + if (!block->dealloc(addr)) + { + LOG_ERROR(MEMORY, "%s(): deallocation failed (addr=0x%x)\n", __func__, addr); + return; + } + } + bool block_t::try_alloc(u32 addr, u32 size) { // check if memory area is already mapped diff --git a/rpcs3/Emu/Memory/vm.h b/rpcs3/Emu/Memory/vm.h index 73adb68e03..12198150e7 100644 --- a/rpcs3/Emu/Memory/vm.h +++ b/rpcs3/Emu/Memory/vm.h @@ -4,7 +4,7 @@ const class thread_ctrl_t* get_current_thread_ctrl(); -class thread_t; +class named_thread_t; namespace vm { @@ -38,13 +38,13 @@ namespace vm { u32 addr = 0; u32 mask = ~0; - thread_t* thread = nullptr; + named_thread_t* thread = nullptr; std::function pred; waiter_t() = default; - waiter_t* reset(u32 addr, u32 size, thread_t& thread) + waiter_t* reset(u32 addr, u32 size, named_thread_t& thread) { this->addr = addr; this->mask = ~(size - 1); @@ -70,7 +70,7 @@ namespace vm public: waiter_lock_t() = delete; - waiter_lock_t(thread_t& thread, u32 addr, u32 size); + waiter_lock_t(named_thread_t& thread, u32 addr, u32 size); waiter_t* operator ->() const { @@ -83,7 +83,7 @@ namespace vm }; // wait until pred() returns true, addr must be aligned to size which must be a power of 2, pred() may be called by any thread - template auto wait_op(thread_t& thread, u32 addr, u32 size, F pred, Args&&... args) -> decltype(static_cast(pred(args...))) + template auto wait_op(named_thread_t& thread, u32 addr, u32 size, F pred, Args&&... args) -> decltype(static_cast(pred(args...))) { // return immediately if condition passed (optimistic case) if (pred(args...)) return; @@ -149,6 +149,9 @@ namespace vm // Unmap memory at specified address (in optionally specified memory location) bool dealloc(u32 addr, memory_location_t location = any); + // dealloc() with no return value and no exceptions + void dealloc_verbose_nothrow(u32 addr, memory_location_t location = any) noexcept; + // Object that handles memory allocations inside specific constant bounds ("location"), currently non-virtual class block_t final { diff --git a/rpcs3/Emu/Memory/vm_var.h b/rpcs3/Emu/Memory/vm_var.h index 1906d1a3fb..e2af2fcf6f 100644 --- a/rpcs3/Emu/Memory/vm_var.h +++ b/rpcs3/Emu/Memory/vm_var.h @@ -10,12 +10,9 @@ namespace vm void dealloc() { - if (m_addr && !vm::dealloc(m_addr)) + if (m_addr) { - if (!std::uncaught_exception()) // don't throw during stack unwinding - { - throw EXCEPTION("Deallocation failed (addr=0x%x)", m_addr); - } + vm::dealloc_verbose_nothrow(m_addr); } } @@ -26,7 +23,7 @@ namespace vm } page_alloc_t(vm::memory_location_t location, u32 count = 1) - : m_addr(alloc(sizeof32(T) * count, location, std::max(alignof32(T), 4096))) + : m_addr(vm::alloc(sizeof32(T) * count, location, std::max(alignof32(T), 4096))) { } @@ -38,7 +35,7 @@ namespace vm other.m_addr = 0; } - ~page_alloc_t() noexcept(false) // allow exceptions + ~page_alloc_t() { this->dealloc(); } @@ -61,7 +58,7 @@ namespace vm template class stack_alloc_t { u32 m_addr; - u32 m_old_pos; + u32 m_old_pos; // TODO: use the stack to save it? CPUThread& m_thread; @@ -69,9 +66,9 @@ namespace vm stack_alloc_t() = delete; stack_alloc_t(CPUThread& thread, u32 count = 1) - : m_thread(thread) + : m_addr(vm::stack_push(thread, sizeof32(T) * count, alignof32(T), m_old_pos)) + , m_thread(thread) { - m_addr = vm::stack_push(thread, sizeof32(T) * count, alignof32(T), m_old_pos); } ~stack_alloc_t() noexcept(false) // allow exceptions diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index c57c33998a..60802dc612 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -794,11 +794,6 @@ GLGSRender::GLGSRender() GLGSRender::~GLGSRender() { - if (joinable()) - { - throw EXCEPTION("Thread not joined"); - } - m_frame->Close(); m_frame->DeleteContext(m_context); } diff --git a/rpcs3/Emu/RSX/GSRender.h b/rpcs3/Emu/RSX/GSRender.h index d0755e5659..0aae3944df 100644 --- a/rpcs3/Emu/RSX/GSRender.h +++ b/rpcs3/Emu/RSX/GSRender.h @@ -5,10 +5,6 @@ struct GSRender : public RSXThread { virtual ~GSRender() override { - if (joinable()) - { - throw EXCEPTION("Thread not joined"); - } } virtual void Close()=0; diff --git a/rpcs3/Emu/RSX/Null/NullGSRender.h b/rpcs3/Emu/RSX/Null/NullGSRender.h index c7cd021246..f26c9d4a83 100644 --- a/rpcs3/Emu/RSX/Null/NullGSRender.h +++ b/rpcs3/Emu/RSX/Null/NullGSRender.h @@ -11,10 +11,6 @@ public: virtual ~NullGSRender() override { - if (joinable()) - { - throw EXCEPTION("Thread not joined"); - } } private: diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index ded727a469..08c4965d6c 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -90,7 +90,7 @@ struct RSXTransformConstant } }; -class RSXThread : protected thread_t +class RSXThread : protected named_thread_t { public: static const uint m_textures_count = 16; @@ -551,10 +551,6 @@ protected: virtual ~RSXThread() override { - if (joinable()) - { - throw EXCEPTION("Thread not joined"); - } } void Reset() diff --git a/rpcs3/Emu/SysCalls/Modules/cellAudio.h b/rpcs3/Emu/SysCalls/Modules/cellAudio.h index 6b8c3d12ce..5227f20b39 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellAudio.h +++ b/rpcs3/Emu/SysCalls/Modules/cellAudio.h @@ -124,7 +124,7 @@ struct AudioPortConfig struct AudioConfig final // custom structure { atomic_t state; - thread_t thread; + named_thread_t thread; AudioPortConfig ports[AUDIO_PORT_COUNT]; u32 buffer; // 1 MB memory for audio ports diff --git a/rpcs3/Emu/SysCalls/Modules/cellFs.cpp b/rpcs3/Emu/SysCalls/Modules/cellFs.cpp index e5d47df18a..51502a74dd 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellFs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellFs.cpp @@ -928,7 +928,7 @@ s32 cellFsAioRead(vm::ptr aio, vm::ptr id, fs_aio_cb_t func) const s32 xid = (*id = ++g_fs_aio_id); - thread_t(WRAP_EXPR("FS AIO Read Thread"), [=]{ fsAio(aio, false, xid, func); }).detach(); + named_thread_t(WRAP_EXPR("FS AIO Read Thread"), [=]{ fsAio(aio, false, xid, func); }).detach(); return CELL_OK; } @@ -941,7 +941,7 @@ s32 cellFsAioWrite(vm::ptr aio, vm::ptr id, fs_aio_cb_t func) const s32 xid = (*id = ++g_fs_aio_id); - thread_t(WRAP_EXPR("FS AIO Write Thread"), [=]{ fsAio(aio, true, xid, func); }).detach(); + named_thread_t(WRAP_EXPR("FS AIO Write Thread"), [=]{ fsAio(aio, true, xid, func); }).detach(); return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp index 992574fa28..088c9147cb 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMsgDialog.cpp @@ -146,7 +146,7 @@ s32 cellMsgDialogOpen2(u32 type, vm::cptr msgString, vm::ptrstate == msgDialogOpen || (s64)(get_system_time() - g_msg_dialog->wait_until) < 0) { diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 088ab55f78..95ed5477d3 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" @@ -30,7 +31,7 @@ u32 ppu_get_tls(u32 thread) { g_tls_size = Emu.GetTLSMemsz() + TLS_SYS; g_tls_start = vm::alloc(g_tls_size * TLS_MAX, vm::main); // memory for up to TLS_MAX threads - sysPrxForUser.Notice("Thread Local Storage initialized (g_tls_start=0x%x, user_size=0x%x)\n*** TLS segment addr: 0x%08x\n*** TLS segment size: 0x%08x", + LOG_NOTICE(MEMORY, "Thread Local Storage initialized (g_tls_start=0x%x, user_size=0x%x)\n*** TLS segment addr: 0x%08x\n*** TLS segment size: 0x%08x", g_tls_start, Emu.GetTLSMemsz(), Emu.GetTLSAddr(), Emu.GetTLSFilesz()); } @@ -73,6 +74,8 @@ void ppu_free_tls(u32 thread) return; } } + + LOG_ERROR(MEMORY, "TLS deallocation failed (thread=0x%x)", thread); } s64 sys_time_get_system_time() diff --git a/rpcs3/Emu/SysCalls/lv2/sys_fs.h b/rpcs3/Emu/SysCalls/lv2/sys_fs.h index c615d12c05..f49a5b5ee5 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_fs.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_fs.h @@ -184,7 +184,7 @@ struct lv2_file_t u64 st_trans_rate; bool st_copyless; - thread_t st_thread; + named_thread_t st_thread; u32 st_buffer; u64 st_read_size; diff --git a/rpcs3/Emu/SysCalls/lv2/sys_timer.h b/rpcs3/Emu/SysCalls/lv2/sys_timer.h index 9b2780fb35..90b4207aeb 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_timer.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_timer.h @@ -31,7 +31,7 @@ struct lv2_timer_t final std::atomic state; // timer state - thread_t thread; // timer thread + named_thread_t thread; // timer thread lv2_timer_t(); ~lv2_timer_t();