mem: add size of tag to make it possible to check subtags

This commit is contained in:
Wim Taymans 2019-08-01 13:55:03 +02:00
parent acf931abc5
commit f1ea49d6e9
5 changed files with 10 additions and 8 deletions

@ -1 +1 @@
Subproject commit 8428103e925966c2d3c1c623f38452a8f6fdfeac
Subproject commit d405ca97ece8efabac83ecb5294175dfd453d27c

View file

@ -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;

View file

@ -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;

View file

@ -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;
}

View file

@ -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);