Возможно, это может сработать:
избавиться от прерывания.
message wait_and_pop(std::condition_variable& interrupt) {
std::unique_lock<std::mutex> lock(mutex);
{
new_msg_notification.wait(lock,[&]{
return !queue.empty() || stop;
});
if( !stop )
{
auto msg(std::move(queue.front()));
queue.pop();
return msg;
}
else
{
return NULL; //or some 'terminate' message
}
}
В деструкторе замените interrupt.notify_all()
на new_msg_notification.notify_all()
Полагаю, вы используете драйвер сеанса по умолчанию, а именно файлы. Из-за этого ваши сеансы установлены на одном сервере, а другой сервер не знает об этом сеансе. Набор токенов csrf в форме создается и проверяется с использованием текущего сеанса для посетителя, если этот запрос будет отправлен на другой сервер, вы получите ошибку 419, поскольку этот сервер не знает о сеансе.
Чтобы решить эту проблему, вы должны использовать драйвер сеанса, который может использоваться несколькими серверами, такими как database
, memcached
или redis
.