update object, object update lock and rare crash
This commit is contained in:
parent
eb169b2779
commit
78390dd342
@ -629,6 +629,10 @@ ObjectHandle SHA1_NGCFT1::constructFileMessageInPlace(Message3Handle msg, NGCFT1
|
||||
}
|
||||
|
||||
bool SHA1_NGCFT1::onEvent(const ObjectStore::Events::ObjectUpdate& e) {
|
||||
if (_object_update_lock) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!e.e.all_of<ObjComp::Ephemeral::File::ActionTransferAccept>()) {
|
||||
return false;
|
||||
}
|
||||
@ -637,10 +641,17 @@ bool SHA1_NGCFT1::onEvent(const ObjectStore::Events::ObjectUpdate& e) {
|
||||
// not ready to load yet, skip
|
||||
return false;
|
||||
}
|
||||
|
||||
if (e.e.all_of<Components::FT1ChunkSHA1Cache>()) {
|
||||
// now we update on recv_done, which included info
|
||||
std::cerr << "SHA1_NGCFT1 warning: accepted but already has FT1ChunkSHA1Cache\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
_object_update_lock = true;
|
||||
|
||||
assert(!e.e.all_of<ObjComp::F::TagLocalHaveAll>());
|
||||
assert(!e.e.all_of<Components::FT1ChunkSHA1Cache>());
|
||||
assert(!e.e.all_of<Components::FT1File2>());
|
||||
//accept(e.e, e.e.get<Message::Components::Transfer::ActionAccept>().save_to_path);
|
||||
|
||||
// first, open file for write(+readback)
|
||||
std::string full_file_path{e.e.get<ObjComp::Ephemeral::File::ActionTransferAccept>().save_to_path};
|
||||
@ -665,6 +676,7 @@ bool SHA1_NGCFT1::onEvent(const ObjectStore::Events::ObjectUpdate& e) {
|
||||
std::cerr << "SHA1_NGCFT1 error: failed opening file '" << full_file_path << "'!\n";
|
||||
// we failed opening that filepath, so we should offer the user the oportunity to save it differently
|
||||
e.e.remove<ObjComp::Ephemeral::File::ActionTransferAccept>(); // stop
|
||||
_object_update_lock = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -743,6 +755,7 @@ bool SHA1_NGCFT1::onEvent(const ObjectStore::Events::ObjectUpdate& e) {
|
||||
|
||||
updateMessages(e.e);
|
||||
|
||||
_object_update_lock = false;
|
||||
return false; // ?
|
||||
}
|
||||
|
||||
@ -1111,11 +1124,13 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_done& e) {
|
||||
|
||||
o.emplace_or_replace<ObjComp::Ephemeral::File::TagTransferPaused>();
|
||||
|
||||
_os.throwEventUpdate(o);
|
||||
|
||||
updateMessages(o);
|
||||
} else if (transfer.isChunk()) {
|
||||
auto o = transfer.getChunk().content;
|
||||
const auto& info = o.get<Components::FT1InfoSHA1>();
|
||||
auto& cc = o.get<Components::FT1ChunkSHA1Cache>();
|
||||
auto& cc = o.get<Components::FT1ChunkSHA1Cache>(); // is this assumption save?
|
||||
|
||||
// HACK: only check first chunk (they *should* all be the same)
|
||||
const auto chunk_index = transfer.getChunk().chunk_indices.front();
|
||||
@ -1223,6 +1238,8 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_done& e) {
|
||||
o.get_or_emplace<Components::FT1ChunkSHA1Requested>().chunks.erase(it);
|
||||
}
|
||||
|
||||
_os.throwEventUpdate(o);
|
||||
|
||||
updateMessages(o); // mostly for received bytes
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,8 @@ class SHA1_NGCFT1 : public ToxEventI, public RegistryMessageModelEventI, public
|
||||
|
||||
Backends::SHA1MappedFilesystem _mfb;
|
||||
|
||||
bool _object_update_lock {false};
|
||||
|
||||
std::minstd_rand _rng {1337*11};
|
||||
|
||||
using clock = std::chrono::steady_clock;
|
||||
|
Loading…
Reference in New Issue
Block a user