Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/core/StarThread_unix.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/source/core/StarThread_unix.cpp b/source/core/StarThread_unix.cpp
index 7fbf279..6d1b173 100644
--- a/source/core/StarThread_unix.cpp
+++ b/source/core/StarThread_unix.cpp
@@ -131,7 +131,13 @@ struct MutexImpl {
}
void lock() {
- pthread_mutex_lock(&mutex);
+ timespec ts;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ ts.tv_sec += 60;
+ if (pthread_mutex_timedlock(&mutex, &ts) != 0) {
+ Logger::warn("Mutex lock is taking too long. Stack:\n{}", outputStack(captureStack());
+ pthread_mutex_lock(&mutex);
+ }
}
void unlock() {
@@ -199,7 +205,13 @@ struct RecursiveMutexImpl {
}
void lock() {
- pthread_mutex_lock(&mutex);
+ timespec ts;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ ts.tv_sec += 60;
+ if (pthread_mutex_timedlock(&mutex, &ts) != 0) {
+ Logger::warn("RecursiveMutex lock is taking too long. Stack:\n{}", outputStack(captureStack());
+ pthread_mutex_lock(&mutex);
+ }
}
void unlock() {