diff options
author | Simon Ser <contact@emersion.fr> | 2020-02-28 13:25:05 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2020-04-02 15:03:43 +0200 |
commit | 6595db64099fa95ec1b43dd2f137e0de58da9e41 (patch) | |
tree | 40c4e0c2846500b42fcf77956005772d5078e8b2 /backend/drm | |
parent | 1674ca725c150e81917c2250571c2607e68ebc6e (diff) | |
download | wlroots-6595db64099fa95ec1b43dd2f137e0de58da9e41.tar.xz |
buffer: add a release event
Consumers call wlr_buffer_lock. Once all consumers are done with the
buffer, only the producer should have a reference to the buffer. In this
case, we can release the buffer (and let the producer re-use it).
Diffstat (limited to 'backend/drm')
-rw-r--r-- | backend/drm/drm.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c index b62de849..d845a888 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -404,8 +404,8 @@ static bool drm_connector_commit_buffer(struct wlr_output *output) { conn->pageflip_pending = true; if (output->pending.buffer_type == WLR_OUTPUT_STATE_BUFFER_SCANOUT) { - wlr_buffer_unref(conn->pending_buffer); - conn->pending_buffer = wlr_buffer_ref(output->pending.buffer); + wlr_buffer_unlock(conn->pending_buffer); + conn->pending_buffer = wlr_buffer_lock(output->pending.buffer); } wlr_output_update_enabled(output, true); @@ -1539,7 +1539,7 @@ static void page_flip_handler(int fd, unsigned seq, // Release the old buffer as it's not displayed anymore. The pending // buffer becomes the current buffer. - wlr_buffer_unref(conn->current_buffer); + wlr_buffer_unlock(conn->current_buffer); conn->current_buffer = conn->pending_buffer; conn->pending_buffer = NULL; @@ -1660,8 +1660,8 @@ static void drm_connector_cleanup(struct wlr_drm_connector *conn) { conn->output.needs_frame = false; conn->output.frame_pending = false; - wlr_buffer_unref(conn->pending_buffer); - wlr_buffer_unref(conn->current_buffer); + wlr_buffer_unlock(conn->pending_buffer); + wlr_buffer_unlock(conn->current_buffer); conn->pending_buffer = conn->current_buffer = NULL; /* Fallthrough */ |