[pulseaudio-discuss] [PATCH v2 06/12] pulsecore: memexport/memimport: Support memfd blocks
Ahmed S. Darwish
darwish.07 at gmail.com
Tue Feb 23 18:56:48 UTC 2016
Hi :-)
On Tue, Feb 23, 2016 at 01:09:17PM +0100, David Henningsson wrote:
> On 2016-02-19 20:28, Ahmed S. Darwish wrote:
> >
...
> >
> >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?
Yup, exactly..
> 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?
>
Making the caller owns the fd is actually simpler ;-)
Here's the sequence of receiving a memfd fd:
packet_complete() - fd received from pipe
-> pa_memimport_attach_memfd()
-> segment_attach()
-> pa_shm_attach()
If we let pa_shm_attach() owns the passed fd, then we'll have to
sprinkle extra 'pa_close(fd)' instances in the sequence above :-(
Why? cause sometimes one method in the chain fails before callig
its lower one. For example, segment_attach() directly quits if
number of attached segments exceeds PA_MEMIMPORT_SEGMENTS_MAX –
pa_shm_attach() is not even reached.
Meanwhile, making the caller owns the fd will let us localize the
pa_close(fd) in just one place: inside packet_complete() itself.
Thanks! (for your always thought-provoking reviews)
--
Darwish
http://darwish.chasingpointers.com
More information about the pulseaudio-discuss
mailing list