[pulseaudio-discuss] [PATCH v2 06/12] pulsecore: memexport/memimport: Support memfd blocks
David Henningsson
david.henningsson at canonical.com
Tue Feb 23 12:09:17 UTC 2016
On 2016-02-19 20:28, Ahmed S. Darwish wrote:
> On Fri, Feb 19, 2016 at 03:54:06PM +0100, David Henningsson wrote:
>>
>> On 2016-02-16 22:41, Ahmed S. Darwish wrote:
>>> Hi :-)
>>>
> ...
>>> 4. The code above is actually for the PA endpoint creating a
>>> memfd mempool and registering it with the other side. That
>>> is, pa_mempool_take_memfd_fd() is just used when registering
>>> a memfd mempool over the pstream.
>>
>> Ah, so that's only used on the sending side. Maybe I was just
>> confused when I wrote the above.
>>
>> But then I have a follow-up question. In shm_attach, which is on the
>> receiving side, why do we need to save the fd in pa_shm at all? I
>> mean, we don't need to send it to anyone else (right?), so all we
>> need is the memory and mmap keeps that open for us. So, we could
>> just close the memfd in shm_attach?
>
> Yup, this is what exactly happens. No fd is ever cached on the
> receiving side at shm_attch(). Similar point was raised in patch #5
> review and a more detailed reply was posted here [*] -- in the 2nd
> reply hunk.
>
> Given that this issue is now raised twice, I'm sure the code is
> badly unclear, possibly due to the per-type stuff now removed.
>
> Anyway here's how shm_attch() now looks like in v3:
>
> static int shm_attach(pa_shm *m, pa_mem_type_t type, unsigned
> id, int memfd_fd, ..) {
> ..
> /* In case of attaching to memfd areas, _the caller_
> * maintains ownership of the passed fd and has the sole
> * responsibility of closing it down.. For other types, we
> * are the code path which created the fd in the first
> * place and we're thus the ones responsible for closing it
> * down */
> if (type != PA_MEM_TYPE_SHARED_MEMFD)
> pa_assert_se(pa_close(fd) == 0);
>
> m->type = type;
> m->id = id;
> m->size = (size_t) st.st_size;
> m->do_unlink = false;
> m->fd = -1;
> }
>
> I guess this is now much more clear :-)
Okay, so it's mostly a design decision then? Whether to take ownership
of the memfd and thus close it down when we're done (and simpler code as
a result?), or let the caller do the same right after the call to
shm_attach?
--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list