summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunghoon Park <jh9216.park@samsung.com>2018-05-10 10:46:41 +0900
committerJunghoon Park <jh9216.park@samsung.com>2018-05-10 10:48:43 +0900
commit8ad51350f650372d274dc2de7afdccfb0d8f3fbe (patch)
tree938bf178d8d85173688568d03dc50632d18dd51f
parent26f6f4da22b4ebc11ebab8f4bfcf094eb92cba6a (diff)
downloadscreen-connector-8ad51350f650372d274dc2de7afdccfb0d8f3fbe.tar.gz
screen-connector-8ad51350f650372d274dc2de7afdccfb0d8f3fbe.tar.bz2
screen-connector-8ad51350f650372d274dc2de7afdccfb0d8f3fbe.zip
Add API for fixing buffer release issue
Change-Id: I5e37db25bb21529d28e465a5d51951e4e6587f1c Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
-rw-r--r--screen_connector_watcher/include/screen_connector_toolkit.h2
-rw-r--r--screen_connector_watcher/src/screen_connector_toolkit.cc19
2 files changed, 21 insertions, 0 deletions
diff --git a/screen_connector_watcher/include/screen_connector_toolkit.h b/screen_connector_watcher/include/screen_connector_toolkit.h
index 9fe4f77..0da2c44 100644
--- a/screen_connector_watcher/include/screen_connector_toolkit.h
+++ b/screen_connector_watcher/include/screen_connector_toolkit.h
@@ -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
}
diff --git a/screen_connector_watcher/src/screen_connector_toolkit.cc b/screen_connector_watcher/src/screen_connector_toolkit.cc
index 5a7b715..4b63845 100644
--- a/screen_connector_watcher/src/screen_connector_toolkit.cc
+++ b/screen_connector_watcher/src/screen_connector_toolkit.cc
@@ -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;
+}