Skip to content

Commit fb4a304

Browse files
committed
Merge pull request #111965 from Ivorforce/memnew-typed
Make `memnew(RefCounted)` return `Ref`, to improve ownership safety
2 parents f90d71f + 05c33ac commit fb4a304

58 files changed

Lines changed: 174 additions & 196 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

core/debugger/engine_debugger.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ void EngineDebugger::initialize(const String &p_uri, bool p_skip_breakpoints, bo
138138
CreatePeerFunc *create_fn = protocols.getptr(proto);
139139
ERR_FAIL_NULL_MSG(create_fn, vformat("Invalid protocol: %s.", proto));
140140

141-
RemoteDebuggerPeer *peer = (*create_fn)(p_uri);
142-
if (!peer) {
141+
Ref<RemoteDebuggerPeer> peer = (*create_fn)(p_uri);
142+
if (peer.is_null()) {
143143
return;
144144
}
145145
singleton = memnew(RemoteDebugger(Ref<RemoteDebuggerPeer>(peer)));

core/debugger/engine_debugger.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
#pragma once
3232

33+
#include "core/object/ref_counted.h"
3334
#include "core/string/string_name.h"
3435
#include "core/string/ustring.h"
3536
#include "core/templates/hash_map.h"
@@ -47,7 +48,7 @@ class EngineDebugger {
4748

4849
typedef Error (*CaptureFunc)(void *p_user, const String &p_msg, const Array &p_args, bool &r_captured);
4950

50-
typedef RemoteDebuggerPeer *(*CreatePeerFunc)(const String &p_uri);
51+
typedef Ref<RemoteDebuggerPeer> (*CreatePeerFunc)(const String &p_uri);
5152

5253
class Profiler {
5354
friend class EngineDebugger;

core/debugger/remote_debugger_peer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ void RemoteDebuggerPeerTCP::_poll() {
211211
}
212212
}
213213

214-
RemoteDebuggerPeer *RemoteDebuggerPeerTCP::create_tcp(const String &p_uri) {
214+
Ref<RemoteDebuggerPeer> RemoteDebuggerPeerTCP::create_tcp(const String &p_uri) {
215215
ERR_FAIL_COND_V(!p_uri.begins_with("tcp://"), nullptr);
216216

217217
String debug_host = p_uri.replace("tcp://", "");
@@ -237,7 +237,7 @@ RemoteDebuggerPeer *RemoteDebuggerPeerTCP::create_tcp(const String &p_uri) {
237237
return memnew(RemoteDebuggerPeerTCP(stream));
238238
}
239239

240-
RemoteDebuggerPeer *RemoteDebuggerPeerTCP::create_unix(const String &p_uri) {
240+
Ref<RemoteDebuggerPeer> RemoteDebuggerPeerTCP::create_unix(const String &p_uri) {
241241
ERR_FAIL_COND_V(!p_uri.begins_with("unix://"), nullptr);
242242

243243
String debug_path = p_uri.replace("unix://", "");

core/debugger/remote_debugger_peer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ class RemoteDebuggerPeerTCP : public RemoteDebuggerPeer {
8282
static Error _try_connect(Ref<StreamPeerSocket> p_stream);
8383

8484
public:
85-
static RemoteDebuggerPeer *create_tcp(const String &p_uri);
86-
static RemoteDebuggerPeer *create_unix(const String &p_uri);
85+
static Ref<RemoteDebuggerPeer> create_tcp(const String &p_uri);
86+
static Ref<RemoteDebuggerPeer> create_unix(const String &p_uri);
8787

8888
bool is_peer_connected() override;
8989
int get_max_message_size() const override;

core/io/net_socket.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030

3131
#include "net_socket.h"
3232

33-
NetSocket *(*NetSocket::_create)() = nullptr;
33+
Ref<NetSocket> (*NetSocket::_create)() = nullptr;
3434

35-
NetSocket *NetSocket::create() {
35+
Ref<NetSocket> NetSocket::create() {
3636
if (_create) {
3737
return _create();
3838
}

core/io/net_socket.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ class NetSocket : public RefCounted {
3737
GDSOFTCLASS(NetSocket, RefCounted);
3838

3939
protected:
40-
static NetSocket *(*_create)();
40+
static Ref<NetSocket> (*_create)();
4141

4242
public:
43-
static NetSocket *create();
43+
static Ref<NetSocket> create();
4444

4545
enum PollType : int32_t {
4646
POLL_TYPE_IN,

core/io/resource_format_binary.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ Error ResourceLoaderBinary::load() {
750750
Ref<Resource> res;
751751
Resource *r = nullptr;
752752

753-
MissingResource *missing_resource = nullptr;
753+
Ref<MissingResource> missing_resource;
754754

755755
if (main) {
756756
res = ResourceLoader::get_resource_ref_override(local_path);
@@ -776,7 +776,7 @@ Error ResourceLoaderBinary::load() {
776776
missing_resource = memnew(MissingResource);
777777
missing_resource->set_original_class(t);
778778
missing_resource->set_recording_properties(true);
779-
obj = missing_resource;
779+
obj = missing_resource.ptr();
780780
} else {
781781
error = ERR_FILE_CORRUPT;
782782
ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, vformat("'%s': Resource of unrecognized type in file: '%s'.", local_path, t));
@@ -832,7 +832,7 @@ Error ResourceLoaderBinary::load() {
832832
}
833833

834834
bool set_valid = true;
835-
if (value.get_type() == Variant::OBJECT && missing_resource == nullptr && ResourceLoader::is_creating_missing_resources_if_class_unavailable_enabled()) {
835+
if (value.get_type() == Variant::OBJECT && missing_resource.is_null() && ResourceLoader::is_creating_missing_resources_if_class_unavailable_enabled()) {
836836
// If the property being set is a missing resource (and the parent is not),
837837
// then setting it will most likely not work.
838838
// Instead, save it as metadata.
@@ -874,7 +874,7 @@ Error ResourceLoaderBinary::load() {
874874
}
875875
}
876876

877-
if (missing_resource) {
877+
if (missing_resource.is_valid()) {
878878
missing_resource->set_recording_properties(false);
879879
}
880880

core/io/udp_server.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ void UDPServer::set_max_pending_connections(int p_max) {
149149
if (!E) {
150150
break;
151151
}
152-
memdelete(E->get().peer);
153152
pending.erase(E);
154153
}
155154
}
@@ -192,7 +191,6 @@ void UDPServer::stop() {
192191
E = pending.front();
193192
while (E) {
194193
E->get().peer->disconnect_shared_socket();
195-
memdelete(E->get().peer);
196194
E = E->next();
197195
}
198196
peers.clear();

core/io/udp_server.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class UDPServer : public RefCounted {
4242
};
4343

4444
struct Peer {
45-
PacketPeerUDP *peer = nullptr;
45+
Ref<PacketPeerUDP> peer;
4646
IPAddress ip;
4747
uint16_t port = 0;
4848

core/math/static_raycaster.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
#include "static_raycaster.h"
3232

33-
StaticRaycaster *(*StaticRaycaster::create_function)() = nullptr;
33+
Ref<StaticRaycaster> (*StaticRaycaster::create_function)() = nullptr;
3434

3535
Ref<StaticRaycaster> StaticRaycaster::create() {
3636
if (create_function) {

0 commit comments

Comments
 (0)