shm: chain_free: BUG() if there are buffers remaining after purge

There may be buffers left, if their destruction has been
deferred. However, they should be on the 'deferred' list, not the
chain's buffer list.

If there are buffers left on the chain's list, that means someone
forgot to call shm_unref().
This commit is contained in:
Daniel Eklöf 2021-07-16 16:49:52 +02:00
parent 0751172b92
commit 6657146a20
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

11
shm.c
View file

@ -515,6 +515,11 @@ shm_get_many(struct buffer_chain *chain, size_t count,
struct buffer *
shm_get_buffer(struct buffer_chain *chain, int width, int height)
{
LOG_DBG(
"chain=%p: looking for a re-usable %dx%d buffer "
"among %zu potential buffers",
(void *)chain, width, height, tll_length(chain->bufs));
struct buffer_private *cached = NULL;
tll_foreach(chain->bufs, it) {
struct buffer_private *buf = it->item;
@ -919,5 +924,11 @@ shm_chain_free(struct buffer_chain *chain)
return;
shm_purge(chain);
if (tll_length(chain->bufs) > 0) {
BUG("chain=%p: there are buffers remaining; "
"is there a missing call to shm_unref()?", (void *)chain);
}
free(chain);
}