From e55c7974db42a2c5bc5e6a8a1ef88ea5602ae266 Mon Sep 17 00:00:00 2001 From: Heikki Haveri Date: Wed, 29 Nov 2017 12:57:28 +0200 Subject: 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 Reviewed-by: BogDan Vatra --- src/corelib/kernel/qjnihelpers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index 02c58858ff..0d7c143999 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -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(); } -- cgit v1.2.3