diff options
author | Junghoon Park <jh9216.park@samsung.com> | 2018-05-10 10:46:41 +0900 |
---|---|---|
committer | Junghoon Park <jh9216.park@samsung.com> | 2018-05-10 10:48:43 +0900 |
commit | 8ad51350f650372d274dc2de7afdccfb0d8f3fbe (patch) | |
tree | 938bf178d8d85173688568d03dc50632d18dd51f | |
parent | 26f6f4da22b4ebc11ebab8f4bfcf094eb92cba6a (diff) | |
download | screen-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.h | 2 | ||||
-rw-r--r-- | screen_connector_watcher/src/screen_connector_toolkit.cc | 19 |
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; +} |