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; mem_size = size;
} }
else { 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); pw_memmap_free(mm);
memid = SPA_ID_INVALID; memid = SPA_ID_INVALID;
@ -663,7 +663,7 @@ static int do_port_set_io(struct impl *impl,
mem_size = size; mem_size = size;
} }
else { 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); pw_memmap_free(mm);
memid = SPA_ID_INVALID; memid = SPA_ID_INVALID;

View file

@ -402,7 +402,7 @@ client_node_set_io(void *object,
uint32_t tag[5] = { data->remote_id, id, }; uint32_t tag[5] = { data->remote_id, id, };
if (memid == SPA_ID_INVALID) { 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); pw_memmap_free(mm);
mm = ptr = NULL; mm = ptr = NULL;
size = 0; size = 0;
@ -713,7 +713,7 @@ client_node_port_set_io(void *object,
} }
if (memid == SPA_ID_INVALID) { 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); pw_memmap_free(mm);
mm = ptr = NULL; mm = ptr = NULL;

View file

@ -692,15 +692,17 @@ struct pw_memblock * pw_mempool_find_fd(struct pw_mempool *pool, int fd)
} }
SPA_EXPORT 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 mempool *impl = SPA_CONTAINER_OF(pool, struct mempool, this);
struct memblock *b; struct memblock *b;
struct memmap *mm; 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(b, &impl->blocks, link) {
spa_list_for_each(mm, &b->maps, 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); pw_log_debug("pool %p: found %p", pool, mm);
return &mm->this; 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]); struct pw_mempool *other, void *data, uint32_t size, uint32_t tag[5]);
/** find a map with the given tag */ /** 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 */ /** Unmap a region */
int pw_memmap_free(struct pw_memmap *map); int pw_memmap_free(struct pw_memmap *map);