Skip to content
Snippets Groups Projects
Commit f00780db authored by Niclas Esser's avatar Niclas Esser
Browse files

Exception on acquired block

parent 0efebdf0
Branches
No related tags found
1 merge request!41Avoid acquiring dada buffers when the buffer is full (writer) or when it is...
Pipeline #241617 passed with warnings
...@@ -12,13 +12,31 @@ ...@@ -12,13 +12,31 @@
namespace psrdada_cpp { namespace psrdada_cpp {
class DadaResourceInUseException : public std::exception {
private:
std::string _message;
public:
DadaResourceInUseException(const std::string& msg)
: _message(std::move(msg)) {}
const char* what() const noexcept override
{
return _message.c_str();
}
};
class DadaInterruptException : public std::exception class DadaInterruptException : public std::exception
{ {
private: private:
std::string _message; std::string _message;
public: public:
DadaInterruptException(const std::string& msg) DadaInterruptException(const std::string& msg)
: _message(msg) {} : _message(std::move(msg)) {}
const char* what() const noexcept override
{
return _message.c_str();
}
}; };
class DadaClientBase class DadaClientBase
...@@ -106,12 +124,12 @@ namespace psrdada_cpp { ...@@ -106,12 +124,12 @@ namespace psrdada_cpp {
/** /**
* @brief Connect to ring buffer * @brief Connect to ring buffer
*/ */
void connect(); virtual void connect();
/** /**
* @brief Disconnect from ring buffer * @brief Disconnect from ring buffer
*/ */
void disconnect(); virtual void disconnect();
/** /**
* @brief Reconnect to the ring buffer * @brief Reconnect to the ring buffer
......
...@@ -188,11 +188,13 @@ void AsyncDadaReadClient::disconnect() ...@@ -188,11 +188,13 @@ void AsyncDadaReadClient::disconnect()
{ {
if(_data_stream.has_block()) if(_data_stream.has_block())
{ {
_data_stream.block_release_callback(); BOOST_LOG_TRIVIAL(error) << this->id() << "Data block was acquired but never released, leaving buffer in undefined state";
throw DadaResourceInUseException("Data block was acquired but never released, leaving buffer in undefined state");
} }
if(_header_stream.has_block()) if(_header_stream.has_block())
{ {
_header_stream.block_release_callback(); BOOST_LOG_TRIVIAL(error) << this->id() << "Header block was acquired but never released, leaving buffer in undefined state";
throw DadaResourceInUseException("Header block was acquired but never released, leaving buffer in undefined state");
} }
if(_locked) if(_locked)
{ {
...@@ -213,6 +215,9 @@ void AsyncDadaReadClient::lock() ...@@ -213,6 +215,9 @@ void AsyncDadaReadClient::lock()
throw std::runtime_error(std::string("Error locking HDU with key: ") + throw std::runtime_error(std::string("Error locking HDU with key: ") +
std::to_string(_key)); std::to_string(_key));
} }
BOOST_LOG_TRIVIAL(debug)
<< this->id() << "Acquired";
_locked = true; _locked = true;
} }
......
...@@ -185,14 +185,9 @@ void DadaClientTester::test_reader_connect() ...@@ -185,14 +185,9 @@ void DadaClientTester::test_reader_connect()
void DadaClientTester::test_reader_disconnect_while_acquired() void DadaClientTester::test_reader_disconnect_while_acquired()
{ {
this->write_data_slot(); // Write one slot, so it can be read this->write_data_slot(); // Write one slot, so it can be read
test_reader->data_stream().next(); // Acquire the slot auto [dbuf, dreleaser] = test_reader->data_stream().next(); // Acquire the slot
ASSERT_TRUE(test_reader->data_stream().has_block());
test_reader->disconnect(); // Disconnect while acquired
ASSERT_FALSE(test_reader->is_connected());
this->write_data_slot();
test_reader->connect();
test_reader->data_stream().next();
ASSERT_TRUE(test_reader->data_stream().has_block()); ASSERT_TRUE(test_reader->data_stream().has_block());
EXPECT_THROW(test_reader->disconnect(), DadaResourceInUseException);
} }
void DadaClientTester::test_writer_connect() void DadaClientTester::test_writer_connect()
......
...@@ -62,12 +62,12 @@ namespace psrdada_cpp { ...@@ -62,12 +62,12 @@ namespace psrdada_cpp {
{ {
if(_data_stream.has_block()) if(_data_stream.has_block())
{ {
BOOST_LOG_TRIVIAL(warning) << "Disconnecting while data block is acquired but not released, realsing it now"; BOOST_LOG_TRIVIAL(warning) << "Disconnecting while data block is acquired but not released, releasing it now";
_data_stream.release(); _data_stream.release();
} }
if(_header_stream.has_block()) if(_header_stream.has_block())
{ {
BOOST_LOG_TRIVIAL(warning) << "Disconnecting while header block is acquired but not released, realsing it now"; BOOST_LOG_TRIVIAL(warning) << "Disconnecting while header block is acquired but not released, releasing it now";
_header_stream.release(); _header_stream.release();
} }
if(_locked) if(_locked)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment