On May 22, 2013 7:32 AM, "Daniel Schürmann" <notifications@github.com>
wrote:
>
> In mixxx/src/playermanager.cpp:
>
> > @@ -46,6 +50,17 @@
> >              this, SLOT(slotNumPreviewDecksControlChanged(double)),
> >              Qt::DirectConnection);
> >
> > +    // Make sure the number of internal decks is in sync with the
number of decks in the skin.
> > +    connect(m_pCOSkinNumDecks, SIGNAL(valueChanged(double)),
> > +            this, SLOT(slotNumDecksControlChanged(double)),
> > +            Qt::DirectConnection);
>
> Qt::DirectConnection should be removed.
> After our atomic changes this is always a Qt::DirectConnection because
the signal is resend by the ControlObject itselve.
> Direct connections are somehow not supported now because if the signal is
from an other thread it is transfered into the current thread by the
ControlObject before.
>

That's not true -- an AutoConnection decides between direct invocation and
queueing based on the emitting thread and the receiver object's thread
property alone (if they match, direct. if not, queue). Nothing we did in
atomic-co changes this -- a non main thread change made to this control (by
looking it up with getControl or in the case of our many shared state
multiple thread classes) would queue, not directly invoke. Also queueing is
not acceptable here because other parts of Mixxx want this processing to be
done immediately (eg so skin processing doesn't have to block while waiting
for PlayerManager to get the signal) and this class is designed to be
thread safe (locks) because of this.

> —
> Reply to this email directly or view it on GitHub.