mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-02-14 04:28:22 -05:00
Merge branch 'acquire-buffer' into 'master'
buffer: introduce wlr_buffer_acquire() See merge request wlroots/wlroots!4916
This commit is contained in:
commit
343e471a23
5 changed files with 32 additions and 6 deletions
|
|
@ -52,7 +52,14 @@ void wlr_buffer_drop(struct wlr_buffer *buffer) {
|
|||
buffer_consider_destroy(buffer);
|
||||
}
|
||||
|
||||
struct wlr_buffer *wlr_buffer_acquire(struct wlr_buffer *buffer) {
|
||||
assert(buffer->n_locks == 0);
|
||||
buffer->n_locks++;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
struct wlr_buffer *wlr_buffer_lock(struct wlr_buffer *buffer) {
|
||||
assert(buffer->n_locks > 0);
|
||||
buffer->n_locks++;
|
||||
return buffer;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ struct wlr_client_buffer *wlr_client_buffer_create(struct wlr_buffer *buffer,
|
|||
client_buffer->renderer_destroy.notify = client_buffer_handle_renderer_destroy;
|
||||
|
||||
// Ensure the buffer will be released before being destroyed
|
||||
wlr_buffer_lock(&client_buffer->base);
|
||||
wlr_buffer_acquire(&client_buffer->base);
|
||||
wlr_buffer_drop(&client_buffer->base);
|
||||
|
||||
return client_buffer;
|
||||
|
|
|
|||
|
|
@ -57,5 +57,12 @@ struct wlr_buffer *wlr_buffer_try_from_resource(struct wl_resource *resource) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
return wlr_buffer_lock(buffer);
|
||||
// If the buffer is released, we want to acquire it. If the buffer is
|
||||
// already acquired (e.g. because it has been attached to another surface),
|
||||
// we want to lock it.
|
||||
if (buffer->n_locks > 0) {
|
||||
return wlr_buffer_lock(buffer);
|
||||
} else {
|
||||
return wlr_buffer_acquire(buffer);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue