[vlc-devel] [PATCH 0/1] dshow: Fix assertion when stopping
Rémi Denis-Courmont
remi at remlab.net
Thu Jun 1 18:10:32 CEST 2017
Le torstaina 1. kesäkuuta 2017, 13.55.24 EEST Hugo Beauzée-Luyssen a écrit :
> > > > Isn´t FindDevices() potentially called from the GUI thread?
> > > > Isn´t the GUI thread entered in an STA?
> > >
> > > Only the Qt GUI calls CoInitializeEx (as far as interfaces are
> > > concerned, obviously)
> >
> > Yes but isn´t the Qt Win32 port also entering an apartment internally,
> > and isn´t that unfortunately an STA?
>
> It does enter an STA, but it immediately releases it once it's done with
> handling file associations.
Are you sure that this is warranted by Qt API? That looks like a version-
dependent implementation detail. I was not even aware that we managed
associations through Qt.
> > The enumeration callbacks indeed seem fine. But what about the access
> > callbacks? What happens if Open() and Read(), or Open() and Close() are
> > serialized yet called in different threads?
> >
> > (...)
> >
> > > Given that you say it would be safe if (...), and that this condition is
> > > met, I'm not sure why this patch is wrong. What would be the correct
> > > solution in your opinion?
> >
> > AFAICT, either the DirectShow code has a thread keeping the MTA alive for
> > the
> > lifetime of the access/access_demux instance, or we ensure that another
> > thread
> > takes care of the same (e.g. in Win32 specific core code).
>
> The MTA gets released by the dshow module from its Close() function, but
> if I understand you correctly, you're worry is that Open and Close won't
> be called from the same thread, right?
> To be honest I'd have assumed it was always the case
There is no such warranty. I don´t recall any specific where Open and Close
would be on different threads. But I wouldn´t be surprised if it was possible
in other call access instantiation sites than the input master or input
slaves.
It is definitely possible for Read/Control to run in different thread than
Open/Close, e.g. with prefetch. Which means you can´t assume that the MTA is
entered during Read or Control, unless you do so explicitly.
And then, there´s the problem that another module in the same thread might
attempt to enter an STA. A module should never leak its apartmenet to its
caller, IMO.
--
雷米‧德尼-库尔蒙
https://www.remlab.net/
More information about the vlc-devel
mailing list