mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
mem: add size of tag to make it possible to check subtags
This commit is contained in:
parent
acf931abc5
commit
f1ea49d6e9
5 changed files with 10 additions and 8 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit 8428103e925966c2d3c1c623f38452a8f6fdfeac
|
||||
Subproject commit d405ca97ece8efabac83ecb5294175dfd453d27c
|
||||
|
|
@ -350,7 +350,7 @@ static int impl_node_set_io(void *object, uint32_t id, void *data, size_t size)
|
|||
mem_size = size;
|
||||
}
|
||||
else {
|
||||
if ((mm = pw_mempool_find_tag(this->client->pool, tag)) != NULL)
|
||||
if ((mm = pw_mempool_find_tag(this->client->pool, tag, sizeof(tag))) != NULL)
|
||||
pw_memmap_free(mm);
|
||||
|
||||
memid = SPA_ID_INVALID;
|
||||
|
|
@ -663,7 +663,7 @@ static int do_port_set_io(struct impl *impl,
|
|||
mem_size = size;
|
||||
}
|
||||
else {
|
||||
if ((mm = pw_mempool_find_tag(this->client->pool, tag)) != NULL)
|
||||
if ((mm = pw_mempool_find_tag(this->client->pool, tag, sizeof(tag))) != NULL)
|
||||
pw_memmap_free(mm);
|
||||
|
||||
memid = SPA_ID_INVALID;
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@ client_node_set_io(void *object,
|
|||
uint32_t tag[5] = { data->remote_id, id, };
|
||||
|
||||
if (memid == SPA_ID_INVALID) {
|
||||
if ((mm = pw_mempool_find_tag(proxy->remote->pool, tag)) != NULL)
|
||||
if ((mm = pw_mempool_find_tag(proxy->remote->pool, tag, sizeof(tag))) != NULL)
|
||||
pw_memmap_free(mm);
|
||||
mm = ptr = NULL;
|
||||
size = 0;
|
||||
|
|
@ -713,7 +713,7 @@ client_node_port_set_io(void *object,
|
|||
}
|
||||
|
||||
if (memid == SPA_ID_INVALID) {
|
||||
if ((mm = pw_mempool_find_tag(proxy->remote->pool, tag)) != NULL)
|
||||
if ((mm = pw_mempool_find_tag(proxy->remote->pool, tag, sizeof(tag))) != NULL)
|
||||
pw_memmap_free(mm);
|
||||
|
||||
mm = ptr = NULL;
|
||||
|
|
|
|||
|
|
@ -692,15 +692,17 @@ struct pw_memblock * pw_mempool_find_fd(struct pw_mempool *pool, int fd)
|
|||
}
|
||||
|
||||
SPA_EXPORT
|
||||
struct pw_memmap * pw_mempool_find_tag(struct pw_mempool *pool, uint32_t tag[5])
|
||||
struct pw_memmap * pw_mempool_find_tag(struct pw_mempool *pool, uint32_t tag[5], size_t size)
|
||||
{
|
||||
struct mempool *impl = SPA_CONTAINER_OF(pool, struct mempool, this);
|
||||
struct memblock *b;
|
||||
struct memmap *mm;
|
||||
|
||||
pw_log_debug("pool %p: find tag %zd", pool, size);
|
||||
|
||||
spa_list_for_each(b, &impl->blocks, link) {
|
||||
spa_list_for_each(mm, &b->maps, link) {
|
||||
if (memcmp(tag, mm->this.tag, sizeof(mm->this.tag)) == 0) {
|
||||
if (memcmp(tag, mm->this.tag, size) == 0) {
|
||||
pw_log_debug("pool %p: found %p", pool, mm);
|
||||
return &mm->this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ struct pw_memmap * pw_mempool_import_map(struct pw_mempool *pool,
|
|||
struct pw_mempool *other, void *data, uint32_t size, uint32_t tag[5]);
|
||||
|
||||
/** find a map with the given tag */
|
||||
struct pw_memmap * pw_mempool_find_tag(struct pw_mempool *pool, uint32_t tag[5]);
|
||||
struct pw_memmap * pw_mempool_find_tag(struct pw_mempool *pool, uint32_t tag[5], size_t size);
|
||||
|
||||
/** Unmap a region */
|
||||
int pw_memmap_free(struct pw_memmap *map);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue