Kernel: Use try_make_weak_ptr() instead of make_weak_ptr()

This commit is contained in:
Idan Horowitz 2022-02-13 21:21:14 +02:00 committed by Andreas Kling
parent 98c20b65cc
commit c8ab7bde3b
Notes: sideshowbarker 2024-07-17 18:53:05 +09:00
7 changed files with 19 additions and 18 deletions

View file

@ -128,7 +128,7 @@ protected:
// If called from an IRQ handler we need to delay evaluation
// and unblocking of waiting threads. Note that this File
// instance may be deleted until the deferred call is executed!
Processor::deferred_call_queue([self = make_weak_ptr()]() {
Processor::deferred_call_queue([self = try_make_weak_ptr().release_value_but_fixme_should_propagate_errors()]() {
if (auto file = self.strong_ref())
file->do_evaluate_block_conditions();
});

View file

@ -53,7 +53,7 @@ public:
template<typename U, typename EnableIf<IsBaseOf<T, U>>::Type* = nullptr>
WeakPtr(const U& object)
: m_link(object.template make_weak_ptr<U>().take_link())
: m_link(object.template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link())
{
}
@ -61,7 +61,7 @@ public:
WeakPtr(const U* object)
{
if (object)
m_link = object->template make_weak_ptr<U>().take_link();
m_link = object->template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link();
}
template<typename U, typename EnableIf<IsBaseOf<T, U>>::Type* = nullptr>
@ -69,7 +69,7 @@ public:
{
object.do_while_locked([&](U* obj) {
if (obj)
m_link = obj->template make_weak_ptr<U>().take_link();
m_link = obj->template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link();
});
}
@ -78,14 +78,14 @@ public:
{
object.do_while_locked([&](U* obj) {
if (obj)
m_link = obj->template make_weak_ptr<U>().take_link();
m_link = obj->template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link();
});
}
template<typename U, typename EnableIf<IsBaseOf<T, U>>::Type* = nullptr>
WeakPtr& operator=(const U& object)
{
m_link = object.template make_weak_ptr<U>().take_link();
m_link = object.template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link();
return *this;
}
@ -93,7 +93,7 @@ public:
WeakPtr& operator=(const U* object)
{
if (object)
m_link = object->template make_weak_ptr<U>().take_link();
m_link = object->template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link();
else
m_link = nullptr;
return *this;
@ -104,7 +104,7 @@ public:
{
object.do_while_locked([&](U* obj) {
if (obj)
m_link = obj->template make_weak_ptr<U>().take_link();
m_link = obj->template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link();
else
m_link = nullptr;
});
@ -116,7 +116,7 @@ public:
{
object.do_while_locked([&](U* obj) {
if (obj)
m_link = obj->template make_weak_ptr<U>().take_link();
m_link = obj->template try_make_weak_ptr<U>().release_value_but_fixme_should_propagate_errors().take_link();
else
m_link = nullptr;
});

View file

@ -266,7 +266,8 @@ ErrorOr<void> Process::attach_resources(NonnullOwnPtr<Memory::AddressSpace>&& pr
first_thread->detach();
}
m_procfs_traits = TRY(ProcessProcFSTraits::try_create({}, *this));
auto weak_ptr = TRY(this->try_make_weak_ptr());
m_procfs_traits = TRY(ProcessProcFSTraits::try_create({}, move(weak_ptr)));
return {};
}

View file

@ -724,9 +724,9 @@ public:
class ProcessProcFSTraits : public ProcFSExposedComponent {
public:
static ErrorOr<NonnullRefPtr<ProcessProcFSTraits>> try_create(Badge<Process>, Process& process)
static ErrorOr<NonnullRefPtr<ProcessProcFSTraits>> try_create(Badge<Process>, WeakPtr<Process> process)
{
return adopt_nonnull_ref_or_enomem(new (nothrow) ProcessProcFSTraits(process));
return adopt_nonnull_ref_or_enomem(new (nothrow) ProcessProcFSTraits(move(process)));
}
virtual InodeIndex component_index() const override;
@ -738,8 +738,8 @@ public:
virtual GroupID owner_group() const override;
private:
explicit ProcessProcFSTraits(Process& process)
: m_process(process.make_weak_ptr())
explicit ProcessProcFSTraits(WeakPtr<Process> process)
: m_process(move(process))
{
}

View file

@ -404,10 +404,10 @@ static ErrorOr<LoadResult> load_elf_object(NonnullOwnPtr<Memory::AddressSpace> n
load_base_address,
elf_image.entry().offset(load_offset).get(),
executable_size,
AK::make_weak_ptr_if_nonnull(master_tls_region),
TRY(AK::try_make_weak_ptr_if_nonnull(master_tls_region)),
master_tls_size,
master_tls_alignment,
stack_region->make_weak_ptr()
TRY(stack_region->try_make_weak_ptr())
};
}

View file

@ -523,7 +523,7 @@ ErrorOr<FlatPtr> Process::sys$allocate_tls(Userspace<const char*> initial_data,
auto range = TRY(address_space().try_allocate_range({}, size));
auto* region = TRY(address_space().allocate_region(range, "Master TLS"sv, PROT_READ | PROT_WRITE));
m_master_tls_region = region->make_weak_ptr();
m_master_tls_region = TRY(region->try_make_weak_ptr());
m_master_tls_size = size;
m_master_tls_alignment = PAGE_SIZE;

View file

@ -359,7 +359,7 @@ void Thread::unblock_from_blocker(Blocker& blocker)
unblock();
};
if (Processor::current_in_irq() != 0) {
Processor::deferred_call_queue([do_unblock = move(do_unblock), self = make_weak_ptr()]() {
Processor::deferred_call_queue([do_unblock = move(do_unblock), self = try_make_weak_ptr().release_value_but_fixme_should_propagate_errors()]() {
if (auto this_thread = self.strong_ref())
do_unblock();
});