Fix Android Service thread getting stuck in service startup

This change allows services using QAndroidService to function properly.
A service using a plain QCoreApplication is still affected.

The original code uses postfix decrement, causing an off-by-one error in
reference counting, which, in turn, fails to properly release a semaphore.

Fix by using deref() instead, which is also more readable, and consistent
with the use of ref() elsewhere in the code.

Task-number: QTBUG-64728
Change-Id: I99b59307638d619506c594f86de6d7d202d755f2
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
Heikki Haveri 2017-11-29 12:57:28 +02:00 committed by BogDan Vatra
parent 48d677365a
commit e55c7974db

View File

@ -592,7 +592,7 @@ void QtAndroidPrivate::setOnBindListener(QtAndroidPrivate::OnBindListener *liste
{
QMutexLocker lock(g_onBindListenerMutex);
*g_onBindListener = listener;
if (!(*g_serviceSetupLockers)--)
if (!g_serviceSetupLockers->deref())
g_waitForServiceSetupSemaphore->release();
}