Add API for fixing buffer release issue 93/178393/2
authorJunghoon Park <jh9216.park@samsung.com>
Thu, 10 May 2018 01:46:41 +0000 (10:46 +0900)
committerJunghoon Park <jh9216.park@samsung.com>
Thu, 10 May 2018 01:48:43 +0000 (10:48 +0900)
Change-Id: I5e37db25bb21529d28e465a5d51951e4e6587f1c
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
screen_connector_watcher/include/screen_connector_toolkit.h
screen_connector_watcher/src/screen_connector_toolkit.cc

index 9fe4f77cd7cce692286a355a558fd58b162a54ac..0da2c44a3587a7d3b61a314b941e7db912c814e1 100644 (file)
@@ -105,6 +105,8 @@ bool screen_connector_toolkit_is_exist(const char* id,
 int screen_connector_toolkit_set_changed_event_filter(
     screen_connector_toolkit_h h,
     screen_connector_changed_event_filter_type type);
+int screen_connector_toolkit_dispose_buffer(screen_connector_toolkit_h handle,
+    const struct wl_buffer* tbm);
 
 #ifdef __cplusplus
 }
index 5a7b7157558a3dd5aef3c07d090b12ab1a6319f0..4b63845ae1c943f19d80d86cc8104e5e2e5ee582 100644 (file)
@@ -87,12 +87,23 @@ class RemoteSurfaceToolkit : public screen_connector::RemoteSurface {
           screen_connector::RemoteSurface::GetAppId().c_str(),
           screen_connector::RemoteSurface::GetInstId().c_str(),
           screen_connector::RemoteSurface::GetPid(), data_);
+      prev_tbms_.push_back(std::move(tbm));
+    }
+  }
+
+  void DisposeBuffer(const struct wl_buffer* tbm) {
+    for (auto& i : prev_tbms_) {
+      if (i->GetRaw() == tbm) {
+        prev_tbms_.remove(i);
+        return;
+      }
     }
   }
 
  private:
   screen_connector_toolkit_ops ops_;
   void* data_;
+  std::list<std::shared_ptr<screen_connector::WlBuffer>> prev_tbms_;
 };
 
 class Toolkit {
@@ -301,3 +312,11 @@ screen_connector_toolkit_set_changed_event_filter(
       (screen_connector::RemoteSurface::ChangedEventFilter)type);
   return 0;
 }
+
+extern "C" EXPORT_API int
+screen_connector_toolkit_dispose_buffer(screen_connector_toolkit_h handle,
+    const struct wl_buffer* tbm) {
+  RemoteSurfaceToolkit* rs = static_cast<RemoteSurfaceToolkit*>(handle);
+  rs->DisposeBuffer(tbm);
+  return 0;
+}