Check buffer duplication 66/192966/2
authorhyunho <hhstark.kang@samsung.com>
Tue, 13 Nov 2018 08:29:59 +0000 (17:29 +0900)
committerhyunho <hhstark.kang@samsung.com>
Tue, 13 Nov 2018 08:38:23 +0000 (17:38 +0900)
If we do not check it, new buffer can be destroyed and empty pointer is remained
in viewer side and could cause null tbm buffer issue.

Change-Id: Ib9ffc53d02ec4f181f0f4117bc35fc37317afc77
Signed-off-by: hyunho <hhstark.kang@samsung.com>
screen_connector_remote_surface/handle.h
screen_connector_remote_surface_evas/image.cc

index 1ab7157..535e8f9 100644 (file)
@@ -35,6 +35,9 @@ class EXPORT_API Handle {
 
   T GetRaw() const { return raw_; }
   bool IsOwner() { return owner_; }
+  void SetIsOwner(bool owner) {
+    owner_ = owner;
+  }
 
  private:
   T raw_;
index df4558a..d38320f 100644 (file)
  * limitations under the License.
  */
 
+#include <dlog.h>
+
 #include "screen_connector_remote_surface_evas/image_internal.h"
 
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "SC_REMOTE_SURFACE"
 #define SC_TOOLKIT_HANDLE_TAG "SC_TOOLKIT_HANDLE_TAG"
 
 namespace screen_connector {
@@ -176,6 +183,12 @@ void Image::Update(std::shared_ptr<WlBuffer> tbm) {
   tbm_surface_h tbmSurface;
   Evas_Native_Surface ns;
 
+  /* if prev buffer is equal to current buffer, do not cleanup tizen remote surface resources */
+  if (prev_buf_.get() != nullptr && tbm->GetRaw() == prev_buf_->GetRaw()) {
+      prev_buf_->SetIsOwner(false);
+      LOGW("Same buffer do not destroy buffer(%p)", tbm->GetRaw());
+  }
+
   prev_buf_ = std::move(tbm);
   /* get tbm surface from buffer */
   tbmSurface = (tbm_surface_h)wl_buffer_get_user_data(prev_buf_->GetRaw());