diff --git a/src/serial.cc b/src/serial.cc index aab4caa7..37b5d704 100755 --- a/src/serial.cc +++ b/src/serial.cc @@ -132,7 +132,16 @@ Serial::read (std::vector &buffer, size_t size) { ScopedReadLock lock(this->pimpl_); uint8_t *buffer_ = new uint8_t[size]; - size_t bytes_read = this->pimpl_->read (buffer_, size); + size_t bytes_read = 0; + + try { + bytes_read = this->pimpl_->read (buffer_, size); + } + catch (const std::exception &e) { + delete[] buffer_; + throw; + } + buffer.insert (buffer.end (), buffer_, buffer_+bytes_read); delete[] buffer_; return bytes_read; @@ -143,7 +152,14 @@ Serial::read (std::string &buffer, size_t size) { ScopedReadLock lock(this->pimpl_); uint8_t *buffer_ = new uint8_t[size]; - size_t bytes_read = this->pimpl_->read (buffer_, size); + size_t bytes_read = 0; + try { + bytes_read = this->pimpl_->read (buffer_, size); + } + catch (const std::exception &e) { + delete[] buffer_; + throw; + } buffer.append (reinterpret_cast(buffer_), bytes_read); delete[] buffer_; return bytes_read;