From a629eb9bfc569f2375e48067723480d3f5089137 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Fri, 15 Aug 2014 21:42:33 +0100 Subject: [PATCH] Force stack re-alignment for entry-points from phread_create with mingw & windows to fix SSE crashes in child threads --- src/Config.h | 8 ++++++++ src/client/requestbroker/RequestBroker.cpp | 2 +- src/gui/search/SearchModel.cpp | 2 +- src/simulation/Gravity.cpp | 2 +- src/tasks/Task.cpp | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Config.h b/src/Config.h index 8fa437e95b..c1ac9e0b94 100644 --- a/src/Config.h +++ b/src/Config.h @@ -173,7 +173,15 @@ #define TPT_INLINE inline #endif +#if + #define SDEUT //#define REALHEAT +#if defined(WIN) && defined(__GNUC__) +#define TH_ENTRY_POINT __attribute__((force_align_arg_pointer)) +#else +#define TH_ENTRY_POINT +#endif + #endif /* CONFIG_H */ diff --git a/src/client/requestbroker/RequestBroker.cpp b/src/client/requestbroker/RequestBroker.cpp index 7f20c907e8..98dac6e460 100644 --- a/src/client/requestbroker/RequestBroker.cpp +++ b/src/client/requestbroker/RequestBroker.cpp @@ -141,7 +141,7 @@ void RequestBroker::RetrieveImage(std::string imageUrl, int width, int height, R assureRunning(); } -void * RequestBroker::thumbnailQueueProcessHelper(void * ref) +TH_ENTRY_POINT void * RequestBroker::thumbnailQueueProcessHelper(void * ref) { ((RequestBroker*)ref)->thumbnailQueueProcessTH(); return NULL; diff --git a/src/gui/search/SearchModel.cpp b/src/gui/search/SearchModel.cpp index f4de2d6c96..f15f6f0eb0 100644 --- a/src/gui/search/SearchModel.cpp +++ b/src/gui/search/SearchModel.cpp @@ -29,7 +29,7 @@ bool SearchModel::GetShowTags() return showTags; } -void * SearchModel::updateSaveListTHelper(void * obj) +TH_ENTRY_POINT void * SearchModel::updateSaveListTHelper(void * obj) { return ((SearchModel *)obj)->updateSaveListT(); } diff --git a/src/simulation/Gravity.cpp b/src/simulation/Gravity.cpp index d3cd5e0424..d76fda5e89 100755 --- a/src/simulation/Gravity.cpp +++ b/src/simulation/Gravity.cpp @@ -127,7 +127,7 @@ void Gravity::gravity_update_async() } } -void *Gravity::update_grav_async_helper(void * context) +TH_ENTRY_POINT void *Gravity::update_grav_async_helper(void * context) { ((Gravity *)context)->update_grav_async(); return NULL; diff --git a/src/tasks/Task.cpp b/src/tasks/Task.cpp index 133d764843..4a41e74567 100644 --- a/src/tasks/Task.cpp +++ b/src/tasks/Task.cpp @@ -122,7 +122,7 @@ void Task::after() } -void * Task::doWork_helper(void * ref) +TH_ENTRY_POINT void * Task::doWork_helper(void * ref) { bool newSuccess = ((Task*)ref)->doWork(); pthread_mutex_lock(&((Task*)ref)->taskMutex);