Skip to content

Commit 09c35a3

Browse files
committed
Protect against null server singleton
1 parent 730d15e commit 09c35a3

File tree

4 files changed

+12
-4
lines changed

4 files changed

+12
-4
lines changed

src/register_types.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void uninitialize_scene_types() {
3030
script_loader.unref();
3131
}
3232

33-
static SchemeReplServer *repl_server;
33+
static SchemeReplServer *repl_server = nullptr;
3434

3535
void initialize_server_types() {
3636
GDREGISTER_CLASS(SchemeReplServer);

src/scheme.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,15 @@ void Scheme::_process(double delta) {
2525
}
2626
void Scheme::_enter_tree() {
2727
// TODO: move initialization here
28-
SchemeReplServer::get_singleton()->publish_node(this);
28+
auto server = SchemeReplServer::get_singleton();
29+
if (server) server->publish_node(this);
30+
2931
Node::_enter_tree();
3032
}
3133

3234
void Scheme::_exit_tree() {
33-
SchemeReplServer::get_singleton()->unpublish_node(this);
35+
auto server = SchemeReplServer::get_singleton();
36+
if (server) server->unpublish_node(this);
3437

3538
if (_process_symbol) {
3639
auto _ = scheme.call_optional("_exit_tree");

src/scheme_repl_server.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ void SchemeReplServer::stop() {
9090
thread.unref();
9191
}
9292

93-
SchemeReplServer *SchemeReplServer::singleton = NULL;
93+
SchemeReplServer *SchemeReplServer::singleton = nullptr;
9494

9595
SchemeReplServer *SchemeReplServer::get_singleton() {
9696
return singleton;
@@ -100,6 +100,10 @@ SchemeReplServer::SchemeReplServer() {
100100
singleton = this;
101101
}
102102

103+
SchemeReplServer::~SchemeReplServer() {
104+
singleton = nullptr;
105+
}
106+
103107
void SchemeReplServer::_bind_methods() {
104108
ClassDB::bind_method(D_METHOD("server_loop"), &SchemeReplServer::server_loop);
105109
ClassDB::bind_method(D_METHOD("reply"), &SchemeReplServer::reply);

src/scheme_repl_server.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class SchemeReplServer : public Object {
2626

2727
public: // extension initialization API
2828
SchemeReplServer();
29+
~SchemeReplServer();
2930
Error start();
3031
void stop();
3132

0 commit comments

Comments
 (0)