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;
 }