Skip to content
Snippets Groups Projects
Commit 083bad9b authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Add lock on createChange

parent c89a15d9
Branches
No related tags found
1 merge request!316Resolves #343 GUI and Frame Refactor
......@@ -100,14 +100,21 @@ const Frame::ChannelData &Frame::_getData(ftl::codecs::Channel c) const {
std::any &Frame::createAnyChange(ftl::codecs::Channel c, ftl::data::ChangeType t) {
if (status_ != FrameStatus::CREATED) throw FTL_Error("Cannot apply change after store " << static_cast<int>(status_));
//UNIQUE_LOCK(mutex(), lk);
ftl::data::Frame::ChannelData *d;
auto &d = data_[c];
if (d.status != ftl::data::ChannelStatus::FLUSHED) {
d.status = ftl::data::ChannelStatus::DISPATCHED;
d.encoded.clear();
if (parent_) {
UNIQUE_LOCK(mutex(), lk);
d = &(data_[c]);
touch(c, t);
return d.data;
} else {
d = &(data_[c]);
touch(c, t);
}
if (d->status != ftl::data::ChannelStatus::FLUSHED) {
d->status = ftl::data::ChannelStatus::DISPATCHED;
d->encoded.clear();
return d->data;
} else {
throw FTL_Error("Channel is flushed and read-only: " << static_cast<unsigned int>(c));
}
......@@ -116,14 +123,21 @@ std::any &Frame::createAnyChange(ftl::codecs::Channel c, ftl::data::ChangeType t
std::any &Frame::createAnyChange(ftl::codecs::Channel c, ftl::data::ChangeType t, ftl::codecs::Packet &data) {
if (status_ != FrameStatus::CREATED) throw FTL_Error("Cannot apply change after store " << static_cast<int>(status_));
//UNIQUE_LOCK(mutex(), lk);
ftl::data::Frame::ChannelData *d;
auto &d = data_[c];
if (d.status != ftl::data::ChannelStatus::FLUSHED) {
d.status = ftl::data::ChannelStatus::DISPATCHED;
d.encoded.push_back(data);
if (parent_) {
UNIQUE_LOCK(mutex(), lk);
d = &(data_[c]);
touch(c, t);
return d.data;
} else {
d = &(data_[c]);
touch(c, t);
}
if (d->status != ftl::data::ChannelStatus::FLUSHED) {
d->status = ftl::data::ChannelStatus::DISPATCHED;
d->encoded.push_back(data);
return d->data;
} else {
throw FTL_Error("Channel is flushed and read-only: " << static_cast<unsigned int>(c));
}
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment