gradido/login_server/src/cpp/lib/MultithreadContainer.cpp

35 lines
878 B
C++

#include "MultithreadContainer.h"
#include "NotificationList.h"
namespace UniLib {
namespace lib {
void MultithreadContainer::lock(const char* stackDetails/* = nullptr*/)
{
const static char* functionName = "MultithreadContainer::lock";
try {
mWorkMutex.lock(500);
if (stackDetails) {
mLastSucceededLock = stackDetails;
}
}
catch (Poco::TimeoutException& ex) {
NotificationList errors;
errors.addError(new ParamError(functionName, "lock timeout", ex.displayText()));
if (mLastSucceededLock != "") {
errors.addError(new ParamError(functionName, "last succeed lock by ", mLastSucceededLock.data()));
}
if (stackDetails) {
errors.addError(new Error(functionName, stackDetails));
}
errors.sendErrorsAsEmail();
}
}
bool MultithreadContainer::tryLock()
{
return mWorkMutex.tryLock();
}
}
}