ams: prefer construct_at/destroy_at over placement new/explicit destructor
This commit is contained in:
@@ -33,7 +33,7 @@ namespace ams::os::impl {
|
||||
event->auto_clear = (clear_mode == EventClearMode_AutoClear);
|
||||
|
||||
/* Create the waitlist node. */
|
||||
new (GetPointer(event->waitable_object_list_storage)) impl::WaitableObjectList;
|
||||
util::ConstructAt(event->waitable_object_list_storage);
|
||||
|
||||
/* Set state. */
|
||||
event->state = InterProcessEventType::State_Initialized;
|
||||
@@ -71,7 +71,7 @@ namespace ams::os::impl {
|
||||
}
|
||||
|
||||
/* Destroy the waitlist. */
|
||||
GetReference(event->waitable_object_list_storage).~WaitableObjectList();
|
||||
util::DestroyAt(event->waitable_object_list_storage);
|
||||
}
|
||||
|
||||
void AttachInterProcessEvent(InterProcessEventType *event, Handle read_handle, bool read_handle_managed, Handle write_handle, bool write_handle_managed, EventClearMode clear_mode) {
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace ams::os::impl {
|
||||
public:
|
||||
static ALWAYS_INLINE void InitializeResourceManagerInstance() {
|
||||
/* Construct the resource manager instance. */
|
||||
new (GetPointer(s_resource_manager_storage)) OsResourceManager;
|
||||
util::ConstructAt(s_resource_manager_storage);
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE OsResourceManager &GetResourceManagerInstance() {
|
||||
|
||||
@@ -24,11 +24,11 @@ namespace ams::os::impl {
|
||||
|
||||
void SetupThreadObjectUnsafe(ThreadType *thread, ThreadImpl *thread_impl, ThreadFunction function, void *arg, void *stack, size_t stack_size, s32 priority) {
|
||||
/* Setup objects. */
|
||||
new (GetPointer(thread->cs_thread)) impl::InternalCriticalSection;
|
||||
new (GetPointer(thread->cv_thread)) impl::InternalConditionVariable;
|
||||
util::ConstructAt(thread->cs_thread);
|
||||
util::ConstructAt(thread->cv_thread);
|
||||
|
||||
new (GetPointer(thread->all_threads_node)) util::IntrusiveListNode;
|
||||
new (GetPointer(thread->waitlist)) WaitableObjectList;
|
||||
util::ConstructAt(thread->all_threads_node);
|
||||
util::ConstructAt(thread->waitlist);
|
||||
|
||||
/* Set member variables. */
|
||||
thread->thread_impl = (thread_impl != nullptr) ? thread_impl : std::addressof(thread->thread_impl_storage);
|
||||
@@ -131,7 +131,7 @@ namespace ams::os::impl {
|
||||
|
||||
thread->state = ThreadType::State_NotInitialized;
|
||||
|
||||
GetReference(thread->waitlist).~WaitableObjectList();
|
||||
util::DestroyAt(thread->waitlist);
|
||||
|
||||
thread->name_buffer[0] = '\x00';
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace ams::os {
|
||||
|
||||
void InitializeConditionVariable(ConditionVariableType *cv) {
|
||||
/* Construct object. */
|
||||
new (GetPointer(cv->_storage)) impl::InternalConditionVariable;
|
||||
util::ConstructAt(cv->_storage);
|
||||
|
||||
/* Mark initialized. */
|
||||
cv->state = ConditionVariableType::State_Initialized;
|
||||
@@ -35,7 +35,7 @@ namespace ams::os {
|
||||
cv->state = ConditionVariableType::State_NotInitialized;
|
||||
|
||||
/* Destroy objects. */
|
||||
GetReference(cv->_storage).~InternalConditionVariable();
|
||||
util::DestroyAt(cv->_storage);
|
||||
}
|
||||
|
||||
void SignalConditionVariable(ConditionVariableType *cv) {
|
||||
|
||||
@@ -37,11 +37,11 @@ namespace ams::os {
|
||||
|
||||
void InitializeEvent(EventType *event, bool signaled, EventClearMode clear_mode) {
|
||||
/* Initialize internal variables. */
|
||||
new (GetPointer(event->cs_event)) impl::InternalCriticalSection;
|
||||
new (GetPointer(event->cv_signaled)) impl::InternalConditionVariable;
|
||||
util::ConstructAt(event->cs_event);
|
||||
util::ConstructAt(event->cv_signaled);
|
||||
|
||||
/* Initialize the waitable object list. */
|
||||
new (GetPointer(event->waitable_object_list_storage)) impl::WaitableObjectList();
|
||||
util::ConstructAt(event->waitable_object_list_storage);
|
||||
|
||||
/* Initialize member variables. */
|
||||
event->signaled = signaled;
|
||||
@@ -61,9 +61,9 @@ namespace ams::os {
|
||||
event->state = EventType::State_NotInitialized;
|
||||
|
||||
/* Destroy objects. */
|
||||
GetReference(event->waitable_object_list_storage).~WaitableObjectList();
|
||||
GetReference(event->cv_signaled).~InternalConditionVariable();
|
||||
GetReference(event->cs_event).~InternalCriticalSection();
|
||||
util::DestroyAt(event->waitable_object_list_storage);
|
||||
util::DestroyAt(event->cv_signaled);
|
||||
util::DestroyAt(event->cs_event);
|
||||
}
|
||||
|
||||
void SignalEvent(EventType *event) {
|
||||
@@ -163,7 +163,7 @@ namespace ams::os {
|
||||
void InitializeWaitableHolder(WaitableHolderType *waitable_holder, EventType *event) {
|
||||
AMS_ASSERT(event->state == EventType::State_Initialized);
|
||||
|
||||
new (GetPointer(waitable_holder->impl_storage)) impl::WaitableHolderOfEvent(event);
|
||||
util::ConstructAt(GetReference(waitable_holder->impl_storage).holder_of_event_storage, event);
|
||||
|
||||
waitable_holder->user_data = 0;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace ams::os {
|
||||
event->clear_mode = static_cast<u8>(clear_mode);
|
||||
|
||||
/* Initialize implementation. */
|
||||
new (GetPointer(event->impl)) impl::InterruptEventImpl(name, clear_mode);
|
||||
util::ConstructAt(event->impl, name, clear_mode);
|
||||
|
||||
/* Mark initialized. */
|
||||
event->state = InterruptEventType::State_Initialized;
|
||||
@@ -38,7 +38,7 @@ namespace ams::os {
|
||||
event->state = InterruptEventType::State_NotInitialized;
|
||||
|
||||
/* Destroy objects. */
|
||||
GetReference(event->impl).~InterruptEventImpl();
|
||||
util::DestroyAt(event->impl);
|
||||
}
|
||||
|
||||
void WaitInterruptEvent(InterruptEventType *event) {
|
||||
@@ -65,7 +65,7 @@ namespace ams::os {
|
||||
void InitializeWaitableHolder(WaitableHolderType *waitable_holder, InterruptEventType *event) {
|
||||
AMS_ASSERT(event->state == InterruptEventType::State_Initialized);
|
||||
|
||||
new (GetPointer(waitable_holder->impl_storage)) impl::WaitableHolderOfInterruptEvent(event);
|
||||
util::ConstructAt(GetReference(waitable_holder->impl_storage).holder_of_interrupt_event_storage, event);
|
||||
|
||||
waitable_holder->user_data = 0;
|
||||
}
|
||||
|
||||
@@ -112,13 +112,13 @@ namespace ams::os {
|
||||
AMS_ASSERT(count >= 1);
|
||||
|
||||
/* Setup objects. */
|
||||
new (GetPointer(mq->cs_queue)) impl::InternalCriticalSection;
|
||||
new (GetPointer(mq->cv_not_full)) impl::InternalConditionVariable;
|
||||
new (GetPointer(mq->cv_not_empty)) impl::InternalConditionVariable;
|
||||
util::ConstructAt(mq->cs_queue);
|
||||
util::ConstructAt(mq->cv_not_full);
|
||||
util::ConstructAt(mq->cv_not_empty);
|
||||
|
||||
/* Setup wait lists. */
|
||||
new (GetPointer(mq->waitlist_not_empty)) impl::WaitableObjectList;
|
||||
new (GetPointer(mq->waitlist_not_full)) impl::WaitableObjectList;
|
||||
util::ConstructAt(mq->waitlist_not_empty);
|
||||
util::ConstructAt(mq->waitlist_not_full);
|
||||
|
||||
/* Set member variables. */
|
||||
mq->buffer = buffer;
|
||||
@@ -140,13 +140,13 @@ namespace ams::os {
|
||||
mq->state = MessageQueueType::State_NotInitialized;
|
||||
|
||||
/* Destroy wait lists. */
|
||||
GetReference(mq->waitlist_not_empty).~WaitableObjectList();
|
||||
GetReference(mq->waitlist_not_full).~WaitableObjectList();
|
||||
util::DestroyAt(mq->waitlist_not_empty);
|
||||
util::DestroyAt(mq->waitlist_not_full);
|
||||
|
||||
/* Destroy objects. */
|
||||
GetReference(mq->cv_not_empty).~InternalConditionVariable();
|
||||
GetReference(mq->cv_not_full).~InternalConditionVariable();
|
||||
GetReference(mq->cs_queue).~InternalCriticalSection();
|
||||
util::DestroyAt(mq->cv_not_empty);
|
||||
util::DestroyAt(mq->cv_not_full);
|
||||
util::DestroyAt(mq->cs_queue);
|
||||
}
|
||||
|
||||
/* Sending (FIFO functionality) */
|
||||
|
||||
@@ -72,7 +72,7 @@ namespace ams::os {
|
||||
AMS_ASSERT((lock_level == 0) || (MutexLockLevelMin <= lock_level && lock_level <= MutexLockLevelMax));
|
||||
|
||||
/* Create object. */
|
||||
new (GetPointer(mutex->_storage)) impl::InternalCriticalSection;
|
||||
util::ConstructAt(mutex->_storage);
|
||||
|
||||
/* Set member variables. */
|
||||
mutex->is_recursive = recursive;
|
||||
@@ -91,7 +91,7 @@ namespace ams::os {
|
||||
mutex->state = MutexType::State_NotInitialized;
|
||||
|
||||
/* Destroy object. */
|
||||
GetReference(mutex->_storage).~InternalCriticalSection();
|
||||
util::DestroyAt(mutex->_storage);
|
||||
}
|
||||
|
||||
void LockMutex(MutexType *mutex) {
|
||||
|
||||
@@ -21,9 +21,9 @@ namespace ams::os {
|
||||
|
||||
void InitalizeReadWriteLock(ReadWriteLockType *rw_lock) {
|
||||
/* Create objects. */
|
||||
new (GetPointer(impl::GetLockCount(rw_lock).cs_storage)) impl::InternalCriticalSection;
|
||||
new (GetPointer(rw_lock->cv_read_lock._storage)) impl::InternalConditionVariable;
|
||||
new (GetPointer(rw_lock->cv_write_lock._storage)) impl::InternalConditionVariable;
|
||||
util::ConstructAt(impl::GetLockCount(rw_lock).cs_storage);
|
||||
util::ConstructAt(rw_lock->cv_read_lock._storage);
|
||||
util::ConstructAt(rw_lock->cv_write_lock._storage);
|
||||
|
||||
/* Set member variables. */
|
||||
impl::ClearReadLockCount(impl::GetLockCount(rw_lock));
|
||||
@@ -48,9 +48,9 @@ namespace ams::os {
|
||||
rw_lock->state = ReadWriteLockType::State_NotInitialized;
|
||||
|
||||
/* Destroy objects. */
|
||||
GetReference(rw_lock->cv_write_lock._storage).~InternalConditionVariable();
|
||||
GetReference(rw_lock->cv_read_lock._storage).~InternalConditionVariable();
|
||||
GetReference(impl::GetLockCount(rw_lock).cs_storage).~InternalCriticalSection();
|
||||
util::DestroyAt(rw_lock->cv_write_lock._storage);
|
||||
util::DestroyAt(rw_lock->cv_read_lock._storage);
|
||||
util::DestroyAt(impl::GetLockCount(rw_lock).cs_storage);
|
||||
}
|
||||
|
||||
void AcquireReadLock(ReadWriteLockType *rw_lock) {
|
||||
|
||||
@@ -24,11 +24,11 @@ namespace ams::os {
|
||||
AMS_ASSERT(count >= 0);
|
||||
|
||||
/* Setup objects. */
|
||||
new (GetPointer(sema->cs_sema)) impl::InternalCriticalSection;
|
||||
new (GetPointer(sema->cv_not_zero)) impl::InternalConditionVariable;
|
||||
util::ConstructAt(sema->cs_sema);
|
||||
util::ConstructAt(sema->cv_not_zero);
|
||||
|
||||
/* Setup wait lists. */
|
||||
new (GetPointer(sema->waitlist)) impl::WaitableObjectList;
|
||||
util::ConstructAt(sema->waitlist);
|
||||
|
||||
/* Set member variables. */
|
||||
sema->count = count;
|
||||
@@ -47,11 +47,11 @@ namespace ams::os {
|
||||
sema->state = SemaphoreType::State_NotInitialized;
|
||||
|
||||
/* Destroy wait lists. */
|
||||
GetReference(sema->waitlist).~WaitableObjectList();
|
||||
util::DestroyAt(sema->waitlist);
|
||||
|
||||
/* Destroy objects. */
|
||||
GetReference(sema->cv_not_zero).~InternalConditionVariable();
|
||||
GetReference(sema->cs_sema).~InternalCriticalSection();
|
||||
util::DestroyAt(sema->cv_not_zero);
|
||||
util::DestroyAt(sema->cs_sema);
|
||||
}
|
||||
|
||||
void AcquireSemaphore(SemaphoreType *sema) {
|
||||
|
||||
@@ -122,10 +122,10 @@ namespace ams::os {
|
||||
void InitializeWaitableHolder(WaitableHolderType *waitable_holder, SystemEventType *event) {
|
||||
switch (event->state) {
|
||||
case SystemEventType::State_InitializedAsInterProcessEvent:
|
||||
new (GetPointer(waitable_holder->impl_storage)) impl::WaitableHolderOfInterProcessEvent(std::addressof(event->inter_process_event));
|
||||
util::ConstructAt(GetReference(waitable_holder->impl_storage).holder_of_inter_process_event_storage, std::addressof(event->inter_process_event));
|
||||
break;
|
||||
case SystemEventType::State_InitializedAsEvent:
|
||||
new (GetPointer(waitable_holder->impl_storage)) impl::WaitableHolderOfEvent(std::addressof(event->event));
|
||||
util::ConstructAt(GetReference(waitable_holder->impl_storage).holder_of_event_storage, std::addressof(event->event));
|
||||
break;
|
||||
AMS_UNREACHABLE_DEFAULT_CASE();
|
||||
}
|
||||
|
||||
@@ -56,11 +56,11 @@ namespace ams::os {
|
||||
|
||||
void InitializeTimerEvent(TimerEventType *event, EventClearMode clear_mode) {
|
||||
/* Initialize internal variables. */
|
||||
new (GetPointer(event->cs_timer_event)) impl::InternalCriticalSection;
|
||||
new (GetPointer(event->cv_signaled)) impl::InternalConditionVariable;
|
||||
util::ConstructAt(event->cs_timer_event);
|
||||
util::ConstructAt(event->cv_signaled);
|
||||
|
||||
/* Initialize the waitable object list. */
|
||||
new (GetPointer(event->waitable_object_list_storage)) impl::WaitableObjectList();
|
||||
util::ConstructAt(event->waitable_object_list_storage);
|
||||
|
||||
/* Initialize member variables. */
|
||||
event->clear_mode = static_cast<u8>(clear_mode);
|
||||
@@ -83,9 +83,9 @@ namespace ams::os {
|
||||
event->state = TimerEventType::State_NotInitialized;
|
||||
|
||||
/* Destroy objects. */
|
||||
GetReference(event->waitable_object_list_storage).~WaitableObjectList();
|
||||
GetReference(event->cv_signaled).~InternalConditionVariable();
|
||||
GetReference(event->cs_timer_event).~InternalCriticalSection();
|
||||
util::DestroyAt(event->waitable_object_list_storage);
|
||||
util::DestroyAt(event->cv_signaled);
|
||||
util::DestroyAt(event->cs_timer_event);
|
||||
}
|
||||
|
||||
void StartOneShotTimerEvent(TimerEventType *event, TimeSpan first_time) {
|
||||
@@ -255,7 +255,7 @@ namespace ams::os {
|
||||
void InitializeWaitableHolder(WaitableHolderType *waitable_holder, TimerEventType *event) {
|
||||
AMS_ASSERT(event->state == EventType::State_Initialized);
|
||||
|
||||
new (GetPointer(waitable_holder->impl_storage)) impl::WaitableHolderOfTimerEvent(event);
|
||||
util::ConstructAt(GetReference(waitable_holder->impl_storage).holder_of_timer_event_storage, event);
|
||||
|
||||
waitable_holder->user_data = 0;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace ams::os {
|
||||
tmem->handle_managed = managed;
|
||||
|
||||
/* Create the critical section. */
|
||||
new (GetPointer(tmem->cs_transfer_memory)) impl::InternalCriticalSection;
|
||||
util::ConstructAt(tmem->cs_transfer_memory);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -118,7 +118,7 @@ namespace ams::os {
|
||||
tmem->handle = svc::InvalidHandle;
|
||||
|
||||
/* Destroy the critical section. */
|
||||
GetReference(tmem->cs_transfer_memory).~InternalCriticalSection();
|
||||
util::DestroyAt(tmem->cs_transfer_memory);
|
||||
}
|
||||
|
||||
Result MapTransferMemory(void **out, TransferMemoryType *tmem, MemoryPermission owner_perm) {
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace ams::os {
|
||||
|
||||
void InitializeWaitableManager(WaitableManagerType *manager) {
|
||||
/* Initialize storage. */
|
||||
new (std::addressof(GetWaitableManagerImpl(manager))) impl::WaitableManagerImpl;
|
||||
util::ConstructAt(manager->impl_storage);
|
||||
|
||||
/* Mark initialized. */
|
||||
manager->state = WaitableManagerType::State_Initialized;
|
||||
@@ -50,7 +50,7 @@ namespace ams::os {
|
||||
manager->state = WaitableManagerType::State_NotInitialized;
|
||||
|
||||
/* Destroy. */
|
||||
impl.~WaitableManagerImpl();
|
||||
util::DestroyAt(manager->impl_storage);
|
||||
}
|
||||
|
||||
WaitableHolderType *WaitAny(WaitableManagerType *manager) {
|
||||
@@ -90,7 +90,7 @@ namespace ams::os {
|
||||
|
||||
AMS_ASSERT(!holder_base->IsLinkedToManager());
|
||||
|
||||
holder_base->~WaitableHolderBase();
|
||||
std::destroy_at(holder_base);
|
||||
}
|
||||
|
||||
void LinkWaitableHolder(WaitableManagerType *manager, WaitableHolderType *holder) {
|
||||
@@ -143,7 +143,7 @@ namespace ams::os {
|
||||
void InitializeWaitableHolder(WaitableHolderType *holder, Handle handle) {
|
||||
AMS_ASSERT(handle != svc::InvalidHandle);
|
||||
|
||||
new (GetPointer(holder->impl_storage)) impl::WaitableHolderOfHandle(handle);
|
||||
util::ConstructAt(GetReference(holder->impl_storage).holder_of_handle_storage, handle);
|
||||
|
||||
holder->user_data = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user