Skip to content
Snippets Groups Projects
Commit f2efc4b3 authored by Guillaume Roguez's avatar Guillaume Roguez
Browse files

data tx: fix socket close when peer has been joigned

Change-Id: Ida39c9b3a30496061f37a4c1a13758dccf06d134
parent da922199
Branches
No related tags found
No related merge requests found
...@@ -64,10 +64,15 @@ public: ...@@ -64,10 +64,15 @@ public:
virtual void accept(const std::string&, std::size_t) {}; virtual void accept(const std::string&, std::size_t) {};
virtual bool start() { virtual bool start() {
wasStarted_ = true;
bool expected = false; bool expected = false;
return started_.compare_exchange_strong(expected, true); return started_.compare_exchange_strong(expected, true);
} }
bool hasBeenStarted() const {
return wasStarted_;
}
void close() noexcept override { void close() noexcept override {
started_ = false; started_ = false;
} }
...@@ -91,6 +96,7 @@ protected: ...@@ -91,6 +96,7 @@ protected:
mutable std::mutex infoMutex_; mutable std::mutex infoMutex_;
mutable DRing::DataTransferInfo info_; mutable DRing::DataTransferInfo info_;
std::atomic_bool started_ {false}; std::atomic_bool started_ {false};
std::atomic_bool wasStarted_ {false};
}; };
void void
...@@ -394,7 +400,7 @@ DataTransferFacade::Impl::onConnectionRequestReply(const DRing::DataTransferId& ...@@ -394,7 +400,7 @@ DataTransferFacade::Impl::onConnectionRequestReply(const DRing::DataTransferId&
if (transfer->start()) { if (transfer->start()) {
connection->attachInputStream(transfer); connection->attachInputStream(transfer);
} }
} else { } else if (not transfer->hasBeenStarted()) {
transfer->emit(DRing::DataTransferEventCode::unjoinable_peer); transfer->emit(DRing::DataTransferEventCode::unjoinable_peer);
cancel(*transfer); cancel(*transfer);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment