In most cases, the fence was closed in presentDisplay(). However,
presentDisplay() is not necessarily called after setClientTarget().
This changes mAcquireFence to a base::unique_fd to make sure the
previous one is always closed before a new one is assigned.
buffer_handle_t target, int32_t acquireFence,
int32_t /*dataspace*/, const std::vector<hwc_rect_t>& /*damage*/) {
mBuffer = target;
- mAcquireFence = acquireFence;
+ mAcquireFence.reset(acquireFence);
return Error::NONE;
}
if (mAcquireFence >= 0) {
sync_wait(mAcquireFence, -1);
- close(mAcquireFence);
+ mAcquireFence.reset();
}
display->present(mBuffer);
#pragma once
#include <unordered_map>
+#include <android-base/unique_fd.h>
#include <composer-hal/2.1/ComposerHal.h>
#include "DrmDevice.h"
// The next client target buffer to be displayed
buffer_handle_t mBuffer = nullptr;
- int mAcquireFence;
+ base::unique_fd mAcquireFence;
};
} // namespace drmfb