serenity/AK
Andreas Kling 7ea264a660 AK: NonnullRefPtr should allow assigning owner to ownee
Given the following situation:

    struct Object : public RefCounted<Object> {
        RefPtr<Object> parent;
    }

    NonnullRefPtr<Object> object = get_some_object();
    object = *object->parent;

We would previously crash if 'object' was the only strongly referencing
pointer to 'parent'. This happened because NonnullRefPtr would unref
the outgoing pointee before reffing the incoming pointee.

This patch fixes that by implementing NonnullRefPtr assignments using
pointer swaps, just like RefPtr already did.
2020-01-18 14:40:04 +01:00
..
Tests AK: NonnullRefPtr should allow assigning owner to ownee 2020-01-18 14:40:04 +01:00
Assertions.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Atomic.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Badge.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
BinarySearch.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Bitmap.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
BufferStream.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
ByteBuffer.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
CircularDeque.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
CircularQueue.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Demangle.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
DoublyLinkedList.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Error.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
FileSystemPath.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
FileSystemPath.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
FixedArray.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Function.h Add clang-format file 2019-05-28 17:31:20 +02:00
HashFunctions.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
HashMap.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
HashTable.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
IDAllocator.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
InlineLinkedList.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
InlineLRUCache.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
IntrusiveList.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
IPv4Address.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
IterationDecision.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonArray.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonArraySerializer.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonObject.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonObjectSerializer.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonParser.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonParser.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonValue.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
JsonValue.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
kmalloc.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
kstdio.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
LogStream.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
LogStream.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Makefile Build: clean up build system, use one shared Makefile 2019-12-20 20:20:54 +01:00
MappedFile.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
MappedFile.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
NetworkOrdered.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
NeverDestroyed.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Noncopyable.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
NonnullOwnPtr.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
NonnullOwnPtrVector.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
NonnullPtrVector.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
NonnullRefPtr.h AK: NonnullRefPtr should allow assigning owner to ownee 2020-01-18 14:40:04 +01:00
NonnullRefPtrVector.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Optional.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
OwnPtr.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Platform.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
PrintfImplementation.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Queue.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
QuickSort.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
RefCounted.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
RefPtr.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Result.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
ScopedValueRollback.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
ScopeGuard.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
SharedBuffer.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
SharedBuffer.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
SinglyLinkedList.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
StdLibExtras.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
String.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
String.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
StringBuilder.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
StringBuilder.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
StringImpl.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
StringImpl.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
StringView.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
StringView.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
TemporaryChange.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
TestSuite.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Time.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Traits.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Types.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
URL.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
URL.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Utf8View.cpp Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Utf8View.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Vector.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
Weakable.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00
WeakPtr.h Meta: Add license header to source files 2020-01-18 09:45:54 +01:00