1
0
mirror of https://github.com/falk-werner/webfuse synced 2024-10-27 20:34:10 +00:00

fix: fixed threading issue (unsychronized access to wsi_)

This commit is contained in:
Falk Werner 2020-07-04 12:43:58 +02:00
parent 4aab6ccf9b
commit e1abcb0f23

View File

@ -121,7 +121,9 @@ public:
~Private() ~Private()
{ {
Invoke(command::shutdown); std::unique_lock<std::mutex> lock(mutex);
commands.push(command::shutdown);
lock.unlock();
lws_cancel_service(context); lws_cancel_service(context);
thread.join(); thread.join();
@ -356,10 +358,18 @@ private:
} }
break; break;
case command::disconnect: case command::disconnect:
lws_callback_on_writable(self->wsi_); // fallthrough
break;
case command::send: case command::send:
lws_callback_on_writable(self->wsi_); {
std::unique_lock<std::mutex> lock(self->mutex);
lws * wsi = self->wsi_;
lock.unlock();
if (nullptr != wsi)
{
lws_callback_on_writable(wsi);
}
}
break; break;
default: default:
break; break;
@ -381,12 +391,6 @@ private:
return command; return command;
} }
void Invoke(command command)
{
std::unique_lock<std::mutex> lock(mutex);
commands.push(command);
}
lws * wsi_; lws * wsi_;
InvokationHandler & handler_; InvokationHandler & handler_;
std::string protocol_; std::string protocol_;