Переменная очищает свое значение
Я писал многопоточный сервер для цифровой подписи сообщений и проверки на подлинность, и во время сохранения в переменную значения логина, она автоматически очищается, я так же использовал дебаггер для проверки где именно я ошибся, и даже если я ввожу вручную значение через дебаггер, оно моментально очищается. Полный код сервера на Pastebin: https://pastebin.com/3mv6ppg7, библиотека взята с Хабра https://habr.com/ru/post/503432/, код клиента https://pastebin.com/YMen0PU8
if(isValidCommand(command))
{
std::string Vlogin,pass;
Vlogin =parseValidLogin(command);
pass = parseValidPass(command);
Valid = db.Valid(Vlogin,pass);
if(Valid)
{
buffer = VALID +"VALIDATED";
ThisUsereLogin = Vlogin;
}
if(!Valid)
{
buffer = VALID+"WRONG_LOGIN_OR_PASSWORD";
}
}
if(isCreateCommand(command))
{
std::string Clogin,pass;
bool isCanCreate = false;
Clogin =parseCreateLogin(command);
pass = parseCreatePass(command);
isCanCreate = db.AddClient(Clogin, pass);
if(isCanCreate)
{
buffer = CREATE+"User_created";
ThisUsereLogin =Clogin;
}
else
{
buffer = CREATE+"Login_busy";
}
Ответы (1 шт):
Если каждый клиент сидит в своем персональном потоке, проблема состоит в этом:
У вас там map, который называется storage, в который функция AddClient лезет без мьютекса. Да и вообще, мьютекс присутствует только в виде #include<mutex>