diff --git a/shm.c b/shm.c index 6785cbfb..f58ca3e4 100644 --- a/shm.c +++ b/shm.c @@ -182,3 +182,20 @@ shm_fini(void) tll_remove(buffers, it); } } + +void +shm_purge(struct wl_shm *shm, unsigned long cookie) +{ + LOG_DBG("cookie=%lx: purging all buffers", cookie); + + /* Purge old buffers associated with this cookie */ + tll_foreach(buffers, it) { + if (it->item.cookie != cookie) + continue; + + assert(!it->item.busy); + + buffer_destroy(&it->item); + tll_remove(buffers, it); + } +} diff --git a/shm.h b/shm.h index 555c5d51..cec0ef81 100644 --- a/shm.h +++ b/shm.h @@ -24,3 +24,5 @@ struct buffer { struct buffer *shm_get_buffer( struct wl_shm *shm, int width, int height, unsigned long cookie); void shm_fini(void); + +void shm_purge(struct wl_shm *shm, unsigned long cookie);