Replace DECLARE_DEFAULT_COMPARISONS in pthread_utils, revert some changes from about 3 weeks ago

1. Replaced DECLARE_DEFAULT_COMPARISONS (pthread_t) with 5 ddifferent LIBPBD_API inline bool operators.

2. Revert some
if (pthread_equal (t.first, pthread_self ()) != 0) {
to
if (pthread_equal (t.first, pthread_self ())) {
(along with one other example).
This commit is contained in:
EZ4Stephen 2025-12-02 23:03:12 +04:00 committed by GitHub
parent 6efe8ceeff
commit ffbe87961e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -38,11 +38,21 @@
#include "pbd/pthread_utils.h"
#ifdef COMPILER_MSVC
DECLARE_DEFAULT_COMPARISONS (pthread_t) // Needed for 'DECLARE_DEFAULT_COMPARISONS'. Objects in an STL container can be
// searched and sorted. Thus, when instantiating the container, MSVC complains
// if the type of object being contained has no appropriate comparison operators
// defined (specifically, if operators '<' and '==' are undefined). This seems
// to be the case with ptw32 'pthread_t' which is a simple struct.
LIBPBD_API inline bool operator<(const pthread_t& lhs, const pthread_t& rhs) {
return lhs.p != rhs.p ? lhs.p < rhs.p : lhs.x < rhs.x;
}
LIBPBD_API inline bool operator==(const pthread_t& lhs, const pthread_t& rhs) {
return lhs.p == rhs.p && lhs.x == rhs.x;
}
LIBPBD_API inline bool operator!=(const pthread_t& lhs, const pthread_t& rhs) {
return !(lhs == rhs);
}
LIBPBD_API inline bool operator==(const pthread_t& lhs, int rhs) {
return !rhs && !lhs.p;
}
LIBPBD_API inline bool operator!=(const pthread_t& lhs, int rhs) {
return rhs || lhs.p;
}
#define pthread_gethandle pthread_getw32threadhandle_np
#endif
@ -194,7 +204,7 @@ fake_thread_start (void* arg)
pthread_mutex_lock (&thread_map_lock);
for (auto const& t : all_threads) {
if (pthread_equal (t.first, pthread_self ()) != 0) {
if (pthread_equal (t.first, pthread_self ())) {
DEBUG_TRACE (PBD::DEBUG::Threads, string_compose ("Terminated: '%1'\n", t.second));
all_threads.erase (t.first);
break;
@ -262,7 +272,7 @@ pthread_kill_all (int signum)
{
pthread_mutex_lock (&thread_map_lock);
for (auto const& t : all_threads) {
if (pthread_equal (t.first, pthread_self ()) != 0) {
if (pthread_equal (t.first, pthread_self ())) {
continue;
}
DEBUG_TRACE (PBD::DEBUG::Threads, string_compose ("Kill: '%1'\n", t.second));
@ -277,7 +287,7 @@ pthread_cancel_all ()
{
pthread_mutex_lock (&thread_map_lock);
for (auto const& t : all_threads) {
if (pthread_equal (t.first, pthread_self ()) != 0) {
if (pthread_equal (t.first, pthread_self ())) {
continue;
}
DEBUG_TRACE (PBD::DEBUG::Threads, string_compose ("Cancel: '%1'\n", t.second));
@ -292,7 +302,7 @@ pthread_cancel_one (pthread_t thread)
{
pthread_mutex_lock (&thread_map_lock);
for (auto const& t : all_threads) {
if (pthread_equal (t.first, thread) != 0) {
if (pthread_equal (t.first, thread)) {
all_threads.erase (t.first);
break;
}
@ -588,7 +598,7 @@ PBD::Thread::_run (void* arg)
/* cleanup */
pthread_mutex_lock (&thread_map_lock);
for (auto const& t : all_threads) {
if (pthread_equal (t.first, pthread_self ()) != 0) {
if (pthread_equal (t.first, pthread_self ())) {
DEBUG_TRACE (PBD::DEBUG::Threads, string_compose ("Terminated: '%1'\n", t.second));
all_threads.erase (t.first);
break;
@ -611,5 +621,5 @@ PBD::Thread::join ()
bool
PBD::Thread::caller_is_self () const
{
return pthread_equal (_t, pthread_self ()) != 0;
return pthread_equal (_t, pthread_self ());
}