Skip to content

Commit

Permalink
Fix data races in startup/teardown
Browse files Browse the repository at this point in the history
  • Loading branch information
myaaaaaaaaa committed Mar 6, 2023
1 parent 7e79aea commit d337ed1
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 8 deletions.
8 changes: 4 additions & 4 deletions core/io/ip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ struct _IP_ResolverPrivate {
Semaphore sem;

Thread thread;
bool thread_abort = false;
SafeFlag thread_abort;

void resolve_queues() {
for (int i = 0; i < IP::RESOLVER_MAX_QUERIES; i++) {
Expand Down Expand Up @@ -111,7 +111,7 @@ struct _IP_ResolverPrivate {
static void _thread_function(void *self) {
_IP_ResolverPrivate *ipr = static_cast<_IP_ResolverPrivate *>(self);

while (!ipr->thread_abort) {
while (!ipr->thread_abort.is_set()) {
ipr->sem.wait();
ipr->resolve_queues();
}
Expand Down Expand Up @@ -343,12 +343,12 @@ IP::IP() {
singleton = this;
resolver = memnew(_IP_ResolverPrivate);

resolver->thread_abort = false;
resolver->thread_abort.clear();
resolver->thread.start(_IP_ResolverPrivate::_thread_function, resolver);
}

IP::~IP() {
resolver->thread_abort = true;
resolver->thread_abort.set();
resolver->sem.post();
resolver->thread.wait_to_finish();

Expand Down
6 changes: 3 additions & 3 deletions core/os/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ void Thread::_set_platform_functions(const PlatformFunctions &p_functions) {
platform_functions = p_functions;
}

void Thread::callback(Thread *p_self, const Settings &p_settings, Callback p_callback, void *p_userdata) {
Thread::caller_id = _thread_id_hash(p_self->thread.get_id());
void Thread::callback(ID p_caller_id, const Settings &p_settings, Callback p_callback, void *p_userdata) {
Thread::caller_id = p_caller_id;
if (platform_functions.set_priority) {
platform_functions.set_priority(p_settings.priority);
}
Expand Down Expand Up @@ -79,7 +79,7 @@ void Thread::start(Thread::Callback p_callback, void *p_user, const Settings &p_
std::thread empty_thread;
thread.swap(empty_thread);
}
std::thread new_thread(&Thread::callback, this, p_settings, p_callback, p_user);
std::thread new_thread(&Thread::callback, _thread_id_hash(thread.get_id()), p_settings, p_callback, p_user);
thread.swap(new_thread);
id = _thread_id_hash(thread.get_id());
}
Expand Down
2 changes: 1 addition & 1 deletion core/os/thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class Thread {
static thread_local ID caller_id;
std::thread thread;

static void callback(Thread *p_self, const Settings &p_settings, Thread::Callback p_callback, void *p_userdata);
static void callback(ID p_caller_id, const Settings &p_settings, Thread::Callback p_callback, void *p_userdata);

static PlatformFunctions platform_functions;

Expand Down

0 comments on commit d337ed1

Please sign in to comment.