client-node: fix mem_offset of io areas

This commit is contained in:
Wim Taymans 2018-03-08 11:04:29 +01:00
parent 6d569b132f
commit fb7a51c6e7

View file

@ -617,11 +617,12 @@ impl_node_port_set_io(struct spa_node *node,
if ((mem = pw_memblock_find(data)) == NULL) if ((mem = pw_memblock_find(data)) == NULL)
return -EINVAL; return -EINVAL;
mem_offset = mem->offset; mem_offset = SPA_PTRDIFF(data, mem->ptr);
mem_size = mem->size; mem_size = mem->size;
if (mem_size - mem_offset < size) if (mem_size - mem_offset < size)
return -EINVAL; return -EINVAL;
mem_offset += mem->offset;
m = ensure_mem(impl, mem->fd, t->data.MemFd, mem->flags); m = ensure_mem(impl, mem->fd, t->data.MemFd, mem->flags);
memid = m->id; memid = m->id;
} }
@ -965,7 +966,7 @@ client_node_done(void *data, int seq, int res)
struct impl *impl = data; struct impl *impl = data;
struct node *this = &impl->node; struct node *this = &impl->node;
if (seq == 0 && res == 0) if (seq == 0 && res == 0 && impl->transport == NULL)
setup_transport(impl); setup_transport(impl);
this->callbacks->done(this->callbacks_data, seq, res); this->callbacks->done(this->callbacks_data, seq, res);
@ -1144,6 +1145,8 @@ node_init(struct node *this,
this->data_source.mask = SPA_IO_IN | SPA_IO_ERR | SPA_IO_HUP; this->data_source.mask = SPA_IO_IN | SPA_IO_ERR | SPA_IO_HUP;
this->data_source.rmask = 0; this->data_source.rmask = 0;
this->seq = 1;
return SPA_RESULT_RETURN_ASYNC(this->seq++); return SPA_RESULT_RETURN_ASYNC(this->seq++);
} }