libmems: Reset Buffer When Error Occurs
This commit fixes the bug that when error occurs, the deprecated buffer
should be reset.
A potential error: when the refill function gets a timeout or other
error, the file descriptor that the buffer uses will be invalidated.
Therefore, we should reset the buffer to prevent it being reused in the
next ReadEvents.
BUG=chromium:971175
TEST=build with debug code in mems_setup/main.cc and camera/hal_adapter
observe events are retrieved
Change-Id: I28a5d85fd866aa35e12a4756d7886f3219a11e26
Reviewed-on: https://chromium-review.googlesource.com/1718284
Tested-by: Cheng-Hao Yang <chenghaoyang@chromium.org>
Tested-by: Enrico Granata <egranata@chromium.org>
Commit-Ready: Cheng-Hao Yang <chenghaoyang@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Enrico Granata <egranata@chromium.org>
diff --git a/libmems/iio_device_impl.cc b/libmems/iio_device_impl.cc
index 8465459..5501ebe 100644
--- a/libmems/iio_device_impl.cc
+++ b/libmems/iio_device_impl.cc
@@ -187,6 +187,9 @@
char errMsg[ERROR_BUFFER_SIZE];
iio_strerror(-ret, errMsg, sizeof(errMsg));
LOG(ERROR) << "Unable to refill buffer: " << errMsg;
+ buffer_.reset();
+ buffer_size_ = 0;
+
return false;
}
@@ -197,6 +200,8 @@
if (buf_step != sample_size) {
LOG(ERROR) << "sample_size doesn't match in refill: " << buf_step
<< ", sample_size: " << sample_size;
+ buffer_.reset();
+ buffer_size_ = 0;
return false;
}
@@ -227,8 +232,6 @@
iio_device_get_sample_size(device_) == iio_buffer_step(buffer_.get()))
return true;
- buffer_size_ = num_samples;
-
buffer_.reset();
buffer_.reset(iio_device_create_buffer(device_, num_samples, false));
@@ -239,6 +242,8 @@
return false;
}
+ buffer_size_ = num_samples;
+
return true;
}