diff options
-rw-r--r-- | binaryurp/source/bridge.cxx | 16 | ||||
-rw-r--r-- | binaryurp/source/reader.cxx | 1 | ||||
-rw-r--r-- | binaryurp/source/writer.cxx | 1 |
3 files changed, 14 insertions, 4 deletions
diff --git a/binaryurp/source/bridge.cxx b/binaryurp/source/bridge.cxx index cb69b0c09859..63cc9a70a85e 100644 --- a/binaryurp/source/bridge.cxx +++ b/binaryurp/source/bridge.cxx @@ -255,10 +255,18 @@ void Bridge::terminate(bool final) { osl::MutexGuard g2(mutex_); tp = threadPool_; threadPool_ = 0; - assert(!(reader_.is() && isThread(reader_.get()))); - std::swap(reader_, r); - assert(!(writer_.is() && isThread(writer_.get()))); - std::swap(writer_, w); + if (reader_.is()) { + if (!isThread(reader_.get())) { + r = reader_; + } + reader_.clear(); + } + if (writer_.is()) { + if (!isThread(writer_.get())) { + w = writer_; + } + writer_.clear(); + } state_ = STATE_FINAL; } assert(!(r.is() && w.is())); diff --git a/binaryurp/source/reader.cxx b/binaryurp/source/reader.cxx index 17a8863f6e12..440288881b57 100644 --- a/binaryurp/source/reader.cxx +++ b/binaryurp/source/reader.cxx @@ -128,6 +128,7 @@ void Reader::execute() { SAL_WARN("binaryurp", "caught C++ exception '" << e.what() << '\''); } bridge_->terminate(false); + bridge_.clear(); } void Reader::readMessage(Unmarshal & unmarshal) { diff --git a/binaryurp/source/writer.cxx b/binaryurp/source/writer.cxx index 3d5c199befa0..edcb0f5090ce 100644 --- a/binaryurp/source/writer.cxx +++ b/binaryurp/source/writer.cxx @@ -177,6 +177,7 @@ void Writer::execute() { OSL_TRACE(OSL_LOG_PREFIX "caught C++ exception '%s'", e.what()); } bridge_->terminate(false); + bridge_.clear(); } void Writer::sendRequest( |