Accepting request 260193 from KDE:Qt5
- Added patches from upstream: 0001-Allow-panels-outside-of-availableGeometry.patch (kde#339846) and 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch, 0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch, 0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch, for QTBUG#42189 - Don't install CMake files for plugins, they are useful only for bundled Qt builds - Downgrade sql-plugins from libQt5Sql-devel's requires to suggests - Added QTBUG41590.patch, improve font rendering (QTBUG41590,QTBUG40971) OBS-URL: https://build.opensuse.org/request/show/260193 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtbase?expand=0&rev=31
This commit is contained in:
parent
e4c21e8f38
commit
4f78de248e
46
0001-Allow-panels-outside-of-availableGeometry.patch
Normal file
46
0001-Allow-panels-outside-of-availableGeometry.patch
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
From 0ac4019528888aba8528432434300341df732c4e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marco Martin <mart@kde.org>
|
||||||
|
Date: Tue, 14 Oct 2014 16:55:17 +0200
|
||||||
|
Subject: [PATCH 1/4] Allow panels outside of availableGeometry
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Panels windows are usually outside QScreen::availableGeometry, because
|
||||||
|
they will usually set extended struts to reserve the screen area for
|
||||||
|
themselves, but their own screen() must remain the one in which they
|
||||||
|
are.
|
||||||
|
This cause one downstream behavior to KDE
|
||||||
|
https://bugs.kde.org/show_bug.cgi?id=339846
|
||||||
|
in which a panel got by mistake few pixels on another screen, and
|
||||||
|
was immediately reassigned to that screen, because its geometry was
|
||||||
|
intersecting the new screen availableGeometry() but not the geometry
|
||||||
|
of its own screen, because itself reserved its own geometry away
|
||||||
|
from availableGeometry()
|
||||||
|
|
||||||
|
Change-Id: If6c9defdef62732473687dd336dbcec582bd0ea2
|
||||||
|
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
|
||||||
|
(cherry picked from commit 47ec22a50975d6f616043fc12424ae1e12e584bd)
|
||||||
|
---
|
||||||
|
src/plugins/platforms/xcb/qxcbwindow.cpp | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
|
||||||
|
index 586068d8d9ed9c1987e51d664f76d4f33769f293..a99a5cfab51861b2c64ad552709f5d0bd39a62f3 100644
|
||||||
|
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
|
||||||
|
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
|
||||||
|
@@ -1687,9 +1687,9 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *
|
||||||
|
QPlatformWindow::setGeometry(rect);
|
||||||
|
QWindowSystemInterface::handleGeometryChange(window(), rect);
|
||||||
|
|
||||||
|
- if (!m_screen->availableGeometry().intersects(rect)) {
|
||||||
|
+ if (!m_screen->geometry().intersects(rect)) {
|
||||||
|
Q_FOREACH (QPlatformScreen* screen, m_screen->virtualSiblings()) {
|
||||||
|
- if (screen->availableGeometry().intersects(rect)) {
|
||||||
|
+ if (screen->geometry().intersects(rect)) {
|
||||||
|
m_screen = static_cast<QXcbScreen*>(screen);
|
||||||
|
QWindowSystemInterface::handleWindowScreenChanged(window(), m_screen->QPlatformScreen::screen());
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
2.1.2
|
||||||
|
|
@ -0,0 +1,96 @@
|
|||||||
|
From 596a3d701bfb96de01ff2e127cd628c6b50fd9d6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||||
|
Date: Tue, 28 Oct 2014 17:23:09 -0700
|
||||||
|
Subject: [PATCH 2/4] Always lock the DBus dispatcher before
|
||||||
|
dbus_connection_send*
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
We lock it before dbus_connection_send_with_reply (the async version) in
|
||||||
|
QDBusConnectionPrivate::sendWithReplyAsync. We weren't locking it before
|
||||||
|
send_with_reply_and_block and we apparently should. The locking around
|
||||||
|
the dbus_connection_send function might not be necessary, but let's do
|
||||||
|
it to be safe.
|
||||||
|
|
||||||
|
The lock now needs to be recursive because we may be inside
|
||||||
|
QDBusConnectionPrivate::doDispatch.
|
||||||
|
|
||||||
|
Task-number: QTBUG-42189
|
||||||
|
Change-Id: I7b6b350909359817ea8b3f9c693bced042c9779a
|
||||||
|
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
|
||||||
|
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
|
||||||
|
(cherry picked from commit 6a2bdc4ee2dc49b5d89d09a1f255a7a0e2f18acf)
|
||||||
|
---
|
||||||
|
src/dbus/qdbusintegrator.cpp | 19 +++++++++++++++----
|
||||||
|
src/dbus/qdbusthreaddebug_p.h | 3 +++
|
||||||
|
2 files changed, 18 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
|
||||||
|
index 8f088443169ff6be013d77b149995f556196d588..03f9eef96ed160b8b6df888661d5c1bd5840047b 100644
|
||||||
|
--- a/src/dbus/qdbusintegrator.cpp
|
||||||
|
+++ b/src/dbus/qdbusintegrator.cpp
|
||||||
|
@@ -1023,7 +1023,7 @@ extern bool qDBusInitThreads();
|
||||||
|
|
||||||
|
QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
|
||||||
|
: QObject(p), ref(1), capabilities(0), mode(InvalidMode), connection(0), server(0), busService(0),
|
||||||
|
- watchAndTimeoutLock(QMutex::Recursive),
|
||||||
|
+ watchAndTimeoutLock(QMutex::Recursive), dispatchLock(QMutex::Recursive),
|
||||||
|
rootNode(QString(QLatin1Char('/'))),
|
||||||
|
anonymousAuthenticationAllowed(false)
|
||||||
|
{
|
||||||
|
@@ -1272,7 +1272,10 @@ void QDBusConnectionPrivate::relaySignal(QObject *obj, const QMetaObject *mo, in
|
||||||
|
//qDBusDebug() << "Emitting signal" << message;
|
||||||
|
//qDBusDebug() << "for paths:";
|
||||||
|
q_dbus_message_set_no_reply(msg, true); // the reply would not be delivered to anything
|
||||||
|
- huntAndEmit(connection, msg, obj, rootNode, isScriptable, isAdaptor);
|
||||||
|
+ {
|
||||||
|
+ QDBusDispatchLocker locker(HuntAndEmitAction, this);
|
||||||
|
+ huntAndEmit(connection, msg, obj, rootNode, isScriptable, isAdaptor);
|
||||||
|
+ }
|
||||||
|
q_dbus_message_unref(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1929,7 +1932,11 @@ int QDBusConnectionPrivate::send(const QDBusMessage& message)
|
||||||
|
|
||||||
|
qDBusDebug() << this << "sending message (no reply):" << message;
|
||||||
|
checkThread();
|
||||||
|
- bool isOk = q_dbus_connection_send(connection, msg, 0);
|
||||||
|
+ bool isOk;
|
||||||
|
+ {
|
||||||
|
+ QDBusDispatchLocker locker(SendMessageAction, this);
|
||||||
|
+ isOk = q_dbus_connection_send(connection, msg, 0);
|
||||||
|
+ }
|
||||||
|
int serial = 0;
|
||||||
|
if (isOk)
|
||||||
|
serial = q_dbus_message_get_serial(msg);
|
||||||
|
@@ -1961,7 +1968,11 @@ QDBusMessage QDBusConnectionPrivate::sendWithReply(const QDBusMessage &message,
|
||||||
|
|
||||||
|
qDBusDebug() << this << "sending message (blocking):" << message;
|
||||||
|
QDBusErrorInternal error;
|
||||||
|
- DBusMessage *reply = q_dbus_connection_send_with_reply_and_block(connection, msg, timeout, error);
|
||||||
|
+ DBusMessage *reply;
|
||||||
|
+ {
|
||||||
|
+ QDBusDispatchLocker locker(SendWithReplyAndBlockAction, this);
|
||||||
|
+ reply = q_dbus_connection_send_with_reply_and_block(connection, msg, timeout, error);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
q_dbus_message_unref(msg);
|
||||||
|
|
||||||
|
diff --git a/src/dbus/qdbusthreaddebug_p.h b/src/dbus/qdbusthreaddebug_p.h
|
||||||
|
index f9039ef3cd3925c4484686c1d73c2c3f5499dfff..dcde99169cc15424c7cfa0acf3fd18272ef12aca 100644
|
||||||
|
--- a/src/dbus/qdbusthreaddebug_p.h
|
||||||
|
+++ b/src/dbus/qdbusthreaddebug_p.h
|
||||||
|
@@ -94,6 +94,9 @@ enum ThreadAction {
|
||||||
|
MessageResultReceivedAction = 26,
|
||||||
|
ActivateSignalAction = 27,
|
||||||
|
PendingCallBlockAction = 28,
|
||||||
|
+ SendMessageAction = 29,
|
||||||
|
+ SendWithReplyAndBlockAction = 30,
|
||||||
|
+ HuntAndEmitAction = 31,
|
||||||
|
|
||||||
|
AddTimeoutAction = 50,
|
||||||
|
RealAddTimeoutAction = 51,
|
||||||
|
--
|
||||||
|
2.1.2
|
||||||
|
|
188
0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
Normal file
188
0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
From a006c934177263675302cd5f4ae0c3b1e35215e3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||||
|
Date: Tue, 28 Oct 2014 19:26:17 -0700
|
||||||
|
Subject: [PATCH 3/4] QDBusConnection: Merge the dispatch and the
|
||||||
|
watch-and-timeout locks
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
We don't need two anymore because they now protect the same thing: the
|
||||||
|
state of the DBusConnection. The difference existed when it was possible
|
||||||
|
for two threads to access the DBusConnection at the same time: one doing
|
||||||
|
dispatching and one doing something else. Unfortunately, even though
|
||||||
|
DBusConnection supports this, QtDBus doesn't.
|
||||||
|
|
||||||
|
From d47c05b1889bb4f06203bbc65f4660b8d0128954 (2008-10-08):
|
||||||
|
Details: if we're removing a timer or a watcher from our list,
|
||||||
|
there's a race condition: one thread (not the QDBusConnection thread)
|
||||||
|
could be asking for the removal (which causes an event to be sent),
|
||||||
|
then deletes the pointer. In the meantime, QDBusConnection will
|
||||||
|
process the timers and socket notifiers and could end up calling
|
||||||
|
lidbus-1 with deleted pointers.
|
||||||
|
|
||||||
|
That commit fixed the race condition but introduced a deadlock.
|
||||||
|
|
||||||
|
Task-number: QTBUG-42189
|
||||||
|
Change-Id: I034038f763cbad3a67398909defd31a23c27c965
|
||||||
|
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
|
||||||
|
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
|
||||||
|
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
|
||||||
|
(cherry picked from commit eb99c28861f5e841f306cfe8689627fe0e9bf2e8)
|
||||||
|
---
|
||||||
|
src/dbus/qdbusconnection_p.h | 16 +++++-----------
|
||||||
|
src/dbus/qdbusintegrator.cpp | 22 +++++++++++-----------
|
||||||
|
src/dbus/qdbusthreaddebug_p.h | 7 -------
|
||||||
|
3 files changed, 16 insertions(+), 29 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
|
||||||
|
index fd4ced078d667d966920728252d5ee55dda76ec1..a75dabeeee5c2b920fc4708f2eeefdaeb97ba32c 100644
|
||||||
|
--- a/src/dbus/qdbusconnection_p.h
|
||||||
|
+++ b/src/dbus/qdbusconnection_p.h
|
||||||
|
@@ -290,24 +290,18 @@ public:
|
||||||
|
QStringList serverConnectionNames;
|
||||||
|
|
||||||
|
ConnectionMode mode;
|
||||||
|
+ QDBusConnectionInterface *busService;
|
||||||
|
|
||||||
|
- // members accessed in unlocked mode (except for deletion)
|
||||||
|
- // connection and server provide their own locking mechanisms
|
||||||
|
- // busService doesn't have state to be changed
|
||||||
|
+ // the dispatch lock protects everything related to the DBusConnection or DBusServer
|
||||||
|
+ // including the timeouts and watches
|
||||||
|
+ QMutex dispatchLock;
|
||||||
|
DBusConnection *connection;
|
||||||
|
DBusServer *server;
|
||||||
|
- QDBusConnectionInterface *busService;
|
||||||
|
-
|
||||||
|
- // watchers and timeouts are accessed from any thread
|
||||||
|
- // but the corresponding timer and QSocketNotifier must be handled
|
||||||
|
- // only in the object's thread
|
||||||
|
- QMutex watchAndTimeoutLock;
|
||||||
|
WatcherHash watchers;
|
||||||
|
TimeoutHash timeouts;
|
||||||
|
PendingTimeoutList timeoutsPendingAdd;
|
||||||
|
|
||||||
|
- // members accessed through a lock
|
||||||
|
- QMutex dispatchLock;
|
||||||
|
+ // the master lock protects our own internal state
|
||||||
|
QReadWriteLock lock;
|
||||||
|
QDBusError lastError;
|
||||||
|
|
||||||
|
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
|
||||||
|
index 03f9eef96ed160b8b6df888661d5c1bd5840047b..b396c23a1d0c1958971ce76c8b93ab43c9a18c68 100644
|
||||||
|
--- a/src/dbus/qdbusintegrator.cpp
|
||||||
|
+++ b/src/dbus/qdbusintegrator.cpp
|
||||||
|
@@ -161,7 +161,7 @@ static dbus_bool_t qDBusAddTimeout(DBusTimeout *timeout, void *data)
|
||||||
|
if (!q_dbus_timeout_get_enabled(timeout))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(AddTimeoutAction, d);
|
||||||
|
+ QDBusDispatchLocker locker(AddTimeoutAction, d);
|
||||||
|
if (QCoreApplication::instance() && QThread::currentThread() == d->thread()) {
|
||||||
|
// correct thread
|
||||||
|
return qDBusRealAddTimeout(d, timeout, q_dbus_timeout_get_interval(timeout));
|
||||||
|
@@ -196,7 +196,7 @@ static void qDBusRemoveTimeout(DBusTimeout *timeout, void *data)
|
||||||
|
|
||||||
|
QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
|
||||||
|
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(RemoveTimeoutAction, d);
|
||||||
|
+ QDBusDispatchLocker locker(RemoveTimeoutAction, d);
|
||||||
|
|
||||||
|
// is it pending addition?
|
||||||
|
QDBusConnectionPrivate::PendingTimeoutList::iterator pit = d->timeoutsPendingAdd.begin();
|
||||||
|
@@ -269,7 +269,7 @@ static bool qDBusRealAddWatch(QDBusConnectionPrivate *d, DBusWatch *watch, int f
|
||||||
|
{
|
||||||
|
QDBusConnectionPrivate::Watcher watcher;
|
||||||
|
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(AddWatchAction, d);
|
||||||
|
+ QDBusDispatchLocker locker(AddWatchAction, d);
|
||||||
|
if (flags & DBUS_WATCH_READABLE) {
|
||||||
|
//qDebug("addReadWatch %d", fd);
|
||||||
|
watcher.watch = watch;
|
||||||
|
@@ -303,7 +303,7 @@ static void qDBusRemoveWatch(DBusWatch *watch, void *data)
|
||||||
|
QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
|
||||||
|
int fd = q_dbus_watch_get_unix_fd(watch);
|
||||||
|
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(RemoveWatchAction, d);
|
||||||
|
+ QDBusDispatchLocker locker(RemoveWatchAction, d);
|
||||||
|
QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
|
||||||
|
while (i != d->watchers.end() && i.key() == fd) {
|
||||||
|
if (i.value().watch == watch) {
|
||||||
|
@@ -347,7 +347,7 @@ static void qDBusToggleWatch(DBusWatch *watch, void *data)
|
||||||
|
|
||||||
|
static void qDBusRealToggleWatch(QDBusConnectionPrivate *d, DBusWatch *watch, int fd)
|
||||||
|
{
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(ToggleWatchAction, d);
|
||||||
|
+ QDBusDispatchLocker locker(ToggleWatchAction, d);
|
||||||
|
|
||||||
|
QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
|
||||||
|
while (i != d->watchers.end() && i.key() == fd) {
|
||||||
|
@@ -1022,8 +1022,8 @@ void QDBusConnectionPrivate::deliverCall(QObject *object, int /*flags*/, const Q
|
||||||
|
extern bool qDBusInitThreads();
|
||||||
|
|
||||||
|
QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
|
||||||
|
- : QObject(p), ref(1), capabilities(0), mode(InvalidMode), connection(0), server(0), busService(0),
|
||||||
|
- watchAndTimeoutLock(QMutex::Recursive), dispatchLock(QMutex::Recursive),
|
||||||
|
+ : QObject(p), ref(1), capabilities(0), mode(InvalidMode), busService(0),
|
||||||
|
+ dispatchLock(QMutex::Recursive), connection(0), server(0),
|
||||||
|
rootNode(QString(QLatin1Char('/'))),
|
||||||
|
anonymousAuthenticationAllowed(false)
|
||||||
|
{
|
||||||
|
@@ -1133,7 +1133,7 @@ bool QDBusConnectionPrivate::handleError(const QDBusErrorInternal &error)
|
||||||
|
void QDBusConnectionPrivate::timerEvent(QTimerEvent *e)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(TimerEventAction, this);
|
||||||
|
+ QDBusDispatchLocker locker(TimerEventAction, this);
|
||||||
|
DBusTimeout *timeout = timeouts.value(e->timerId(), 0);
|
||||||
|
if (timeout)
|
||||||
|
q_dbus_timeout_handle(timeout);
|
||||||
|
@@ -1152,7 +1152,7 @@ void QDBusConnectionPrivate::customEvent(QEvent *e)
|
||||||
|
switch (ev->subtype)
|
||||||
|
{
|
||||||
|
case QDBusConnectionCallbackEvent::AddTimeout: {
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(RealAddTimeoutAction, this);
|
||||||
|
+ QDBusDispatchLocker locker(RealAddTimeoutAction, this);
|
||||||
|
while (!timeoutsPendingAdd.isEmpty()) {
|
||||||
|
QPair<DBusTimeout *, int> entry = timeoutsPendingAdd.takeFirst();
|
||||||
|
qDBusRealAddTimeout(this, entry.first, entry.second);
|
||||||
|
@@ -1188,7 +1188,7 @@ void QDBusConnectionPrivate::socketRead(int fd)
|
||||||
|
QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||||
|
|
||||||
|
{
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(SocketReadAction, this);
|
||||||
|
+ QDBusDispatchLocker locker(SocketReadAction, this);
|
||||||
|
WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||||
|
while (it != watchers.constEnd() && it.key() == fd) {
|
||||||
|
if (it->watch && it->read && it->read->isEnabled())
|
||||||
|
@@ -1208,7 +1208,7 @@ void QDBusConnectionPrivate::socketWrite(int fd)
|
||||||
|
QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||||
|
|
||||||
|
{
|
||||||
|
- QDBusWatchAndTimeoutLocker locker(SocketWriteAction, this);
|
||||||
|
+ QDBusDispatchLocker locker(SocketWriteAction, this);
|
||||||
|
WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||||
|
while (it != watchers.constEnd() && it.key() == fd) {
|
||||||
|
if (it->watch && it->write && it->write->isEnabled())
|
||||||
|
diff --git a/src/dbus/qdbusthreaddebug_p.h b/src/dbus/qdbusthreaddebug_p.h
|
||||||
|
index dcde99169cc15424c7cfa0acf3fd18272ef12aca..726ab051d0739ece9d1ea623e04b39f9368464ec 100644
|
||||||
|
--- a/src/dbus/qdbusthreaddebug_p.h
|
||||||
|
+++ b/src/dbus/qdbusthreaddebug_p.h
|
||||||
|
@@ -207,13 +207,6 @@ struct QDBusDispatchLocker: QDBusMutexLocker
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
-struct QDBusWatchAndTimeoutLocker: QDBusMutexLocker
|
||||||
|
-{
|
||||||
|
- inline QDBusWatchAndTimeoutLocker(ThreadAction a, QDBusConnectionPrivate *s)
|
||||||
|
- : QDBusMutexLocker(a, s, &s->watchAndTimeoutLock)
|
||||||
|
- { }
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
#if QDBUS_THREAD_DEBUG
|
||||||
|
# define SEM_ACQUIRE(action, sem) \
|
||||||
|
do { \
|
||||||
|
--
|
||||||
|
2.1.2
|
||||||
|
|
@ -0,0 +1,91 @@
|
|||||||
|
From a08d09767513ac2d6232f2d6d1cf2bc30974f632 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||||
|
Date: Tue, 28 Oct 2014 19:34:01 -0700
|
||||||
|
Subject: [PATCH 4/4] Partially revert "Fix a deadlock introduced by the race
|
||||||
|
condition fix"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The commit was 9361be58f47ec256bf920c378479a02501219c1f (2008-11-17),
|
||||||
|
referring to the race condition fix that was applied in commit
|
||||||
|
d47c05b1889bb4f06203bbc65f4660b8d0128954 (2008-10-08). The fix for the
|
||||||
|
deadlock reintroduced the race condition and the commit message noted
|
||||||
|
it.
|
||||||
|
|
||||||
|
The workaround is no longer necessary since we've fixed the original race
|
||||||
|
condition differently now (see the previous two commits).
|
||||||
|
|
||||||
|
Task-number: QTBUG-42189
|
||||||
|
Change-Id: I5a83249597a83c4d4caa2ae57964ad3cc61c1d70
|
||||||
|
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
|
||||||
|
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
|
||||||
|
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
|
||||||
|
(cherry picked from commit 73a1e8c60d894701f34806cc4b847aa2814bf389)
|
||||||
|
---
|
||||||
|
src/dbus/qdbusintegrator.cpp | 40 ++++++++++++++--------------------------
|
||||||
|
1 file changed, 14 insertions(+), 26 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
|
||||||
|
index b396c23a1d0c1958971ce76c8b93ab43c9a18c68..c87999a48d5ad2fa39a183fe67aad8021065eb1f 100644
|
||||||
|
--- a/src/dbus/qdbusintegrator.cpp
|
||||||
|
+++ b/src/dbus/qdbusintegrator.cpp
|
||||||
|
@@ -1185,41 +1185,29 @@ void QDBusConnectionPrivate::doDispatch()
|
||||||
|
|
||||||
|
void QDBusConnectionPrivate::socketRead(int fd)
|
||||||
|
{
|
||||||
|
- QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||||
|
-
|
||||||
|
- {
|
||||||
|
- QDBusDispatchLocker locker(SocketReadAction, this);
|
||||||
|
- WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||||
|
- while (it != watchers.constEnd() && it.key() == fd) {
|
||||||
|
- if (it->watch && it->read && it->read->isEnabled())
|
||||||
|
- pendingWatches.append(it.value().watch);
|
||||||
|
- ++it;
|
||||||
|
+ QDBusDispatchLocker locker(SocketReadAction, this);
|
||||||
|
+ WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||||
|
+ while (it != watchers.constEnd() && it.key() == fd) {
|
||||||
|
+ if (it->watch && it->read && it->read->isEnabled()) {
|
||||||
|
+ if (!q_dbus_watch_handle(it.value().watch, DBUS_WATCH_READABLE))
|
||||||
|
+ qDebug("OUT OF MEM");
|
||||||
|
}
|
||||||
|
+ ++it;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- for (int i = 0; i < pendingWatches.size(); ++i)
|
||||||
|
- if (!q_dbus_watch_handle(pendingWatches[i], DBUS_WATCH_READABLE))
|
||||||
|
- qDebug("OUT OF MEM");
|
||||||
|
doDispatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QDBusConnectionPrivate::socketWrite(int fd)
|
||||||
|
{
|
||||||
|
- QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||||
|
-
|
||||||
|
- {
|
||||||
|
- QDBusDispatchLocker locker(SocketWriteAction, this);
|
||||||
|
- WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||||
|
- while (it != watchers.constEnd() && it.key() == fd) {
|
||||||
|
- if (it->watch && it->write && it->write->isEnabled())
|
||||||
|
- pendingWatches.append(it.value().watch);
|
||||||
|
- ++it;
|
||||||
|
+ QDBusDispatchLocker locker(SocketWriteAction, this);
|
||||||
|
+ WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||||
|
+ while (it != watchers.constEnd() && it.key() == fd) {
|
||||||
|
+ if (it->watch && it->write && it->write->isEnabled()) {
|
||||||
|
+ if (!q_dbus_watch_handle(it.value().watch, DBUS_WATCH_WRITABLE))
|
||||||
|
+ qDebug("OUT OF MEM");
|
||||||
|
}
|
||||||
|
+ ++it;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- for (int i = 0; i < pendingWatches.size(); ++i)
|
||||||
|
- if (!q_dbus_watch_handle(pendingWatches[i], DBUS_WATCH_WRITABLE))
|
||||||
|
- qDebug("OUT OF MEM");
|
||||||
|
}
|
||||||
|
|
||||||
|
void QDBusConnectionPrivate::objectDestroyed(QObject *obj)
|
||||||
|
--
|
||||||
|
2.1.2
|
||||||
|
|
11
QTBUG41590.patch
Normal file
11
QTBUG41590.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- src/gui/kernel/qplatformintegration.cpp.orig 2014-10-21 12:24:35.314606929 +0200
|
||||||
|
+++ src/gui/kernel/qplatformintegration.cpp 2014-10-21 12:24:45.668477488 +0200
|
||||||
|
@@ -360,7 +360,7 @@ QVariant QPlatformIntegration::styleHint
|
||||||
|
case PasswordMaskCharacter:
|
||||||
|
return QPlatformTheme::defaultThemeHint(QPlatformTheme::PasswordMaskCharacter);
|
||||||
|
case FontSmoothingGamma:
|
||||||
|
- return qreal(1.7);
|
||||||
|
+ return qreal(1.4);
|
||||||
|
case StartDragVelocity:
|
||||||
|
return QPlatformTheme::defaultThemeHint(QPlatformTheme::StartDragVelocity);
|
||||||
|
case UseRtlExtensions:
|
@ -60,10 +60,6 @@ libQt5Gui-devel
|
|||||||
libQt5Sql-devel
|
libQt5Sql-devel
|
||||||
requires "libQt5Core-devel-<targettype> = <version>"
|
requires "libQt5Core-devel-<targettype> = <version>"
|
||||||
requires "libQt5Sql5-<targettype> = <version>"
|
requires "libQt5Sql5-<targettype> = <version>"
|
||||||
requires "libQt5Sql5-mysql-<targettype> = <version>"
|
|
||||||
requires "libQt5Sql5-postgresql-<targettype> = <version>"
|
|
||||||
requires "libQt5Sql5-sqlite-<targettype> = <version>"
|
|
||||||
requires "libQt5Sql5-unixODBC-<targettype> = <version>"
|
|
||||||
libQt5Bootstrap-devel-static
|
libQt5Bootstrap-devel-static
|
||||||
libQt5OpenGLExtensions-devel-static
|
libQt5OpenGLExtensions-devel-static
|
||||||
requires "libQt5Core-devel-<targettype> = <version>"
|
requires "libQt5Core-devel-<targettype> = <version>"
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Nov 5 16:51:36 UTC 2014 - hrvoje.senjan@gmail.com
|
||||||
|
|
||||||
|
- Added patches from upstream:
|
||||||
|
0001-Allow-panels-outside-of-availableGeometry.patch (kde#339846)
|
||||||
|
and 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch,
|
||||||
|
0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch,
|
||||||
|
0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch,
|
||||||
|
for QTBUG#42189
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Oct 29 19:09:33 UTC 2014 - hrvoje.senjan@gmail.com
|
||||||
|
|
||||||
|
- Don't install CMake files for plugins, they are useful only for
|
||||||
|
bundled Qt builds
|
||||||
|
- Downgrade sql-plugins from libQt5Sql-devel's requires to suggests
|
||||||
|
- Added QTBUG41590.patch, improve font rendering
|
||||||
|
(QTBUG41590,QTBUG40971)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sun Oct 12 15:21:11 UTC 2014 - hrvoje.senjan@gmail.com
|
Sun Oct 12 15:21:11 UTC 2014 - hrvoje.senjan@gmail.com
|
||||||
|
|
||||||
|
@ -48,6 +48,8 @@ Patch3: libqt5-Fix-Gujarati-font.patch
|
|||||||
Patch4: protect-geometry-QTBUG-40584.patch
|
Patch4: protect-geometry-QTBUG-40584.patch
|
||||||
# Patch-FIX-SUSE libqt5-do-not-use-shm-if-display-name-doesnt-look-local.patch -- bnc#888858
|
# Patch-FIX-SUSE libqt5-do-not-use-shm-if-display-name-doesnt-look-local.patch -- bnc#888858
|
||||||
Patch5: libqt5-do-not-use-shm-if-display-name-doesnt-look-local.patch
|
Patch5: libqt5-do-not-use-shm-if-display-name-doesnt-look-local.patch
|
||||||
|
# PATCH-FIX-OPENSUSE QTBUG41590.patch -- https://bugreports.qt-project.org/browse/QTBUG-40971 https://bugreports.qt-project.org/browse/QTBUG-41590
|
||||||
|
Patch6: QTBUG41590.patch
|
||||||
# patches 1000-2000 and above from upstream 5.3 branch #
|
# patches 1000-2000 and above from upstream 5.3 branch #
|
||||||
# patches 2000-3000 and above from upstream 5.4 branch #
|
# patches 2000-3000 and above from upstream 5.4 branch #
|
||||||
# PATCH-FIX-UPSTREAM f1ee10f81ac18789e9a7dc715b464415ba2bc2b8.patch -- prefer QPA implementation in qsystemtrayicon_x11 if available
|
# PATCH-FIX-UPSTREAM f1ee10f81ac18789e9a7dc715b464415ba2bc2b8.patch -- prefer QPA implementation in qsystemtrayicon_x11 if available
|
||||||
@ -78,6 +80,14 @@ Patch2011: 0002-Move-SubpixelAntialiasingType-from-QFontEngineFT-to-.patch
|
|||||||
Patch2012: 0003-Support-autohint-and-lcdfilter-fontconfig-configurat.patch
|
Patch2012: 0003-Support-autohint-and-lcdfilter-fontconfig-configurat.patch
|
||||||
# PATCH-FIX-UPSTREAM 0004-GTK2-theme-should-use-GTK-configured-font-variant.patch
|
# PATCH-FIX-UPSTREAM 0004-GTK2-theme-should-use-GTK-configured-font-variant.patch
|
||||||
Patch2013: 0004-GTK2-theme-should-use-GTK-configured-font-variant.patch
|
Patch2013: 0004-GTK2-theme-should-use-GTK-configured-font-variant.patch
|
||||||
|
# PATCH-FIX-UPSTREAM 0001-Allow-panels-outside-of-availableGeometry.patch
|
||||||
|
Patch2014: 0001-Allow-panels-outside-of-availableGeometry.patch
|
||||||
|
# PATCH-FIX-UPSTREAM 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch
|
||||||
|
Patch2015: 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch
|
||||||
|
# PATCH-FIX-UPSTREAM 0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
|
||||||
|
Patch2016: 0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
|
||||||
|
# PATCH-FIX-UPSTREAM 0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch
|
||||||
|
Patch2017: 0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch
|
||||||
BuildRequires: alsa-devel
|
BuildRequires: alsa-devel
|
||||||
BuildRequires: cups-devel
|
BuildRequires: cups-devel
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
@ -162,6 +172,7 @@ handling.
|
|||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
%patch5 -p1
|
%patch5 -p1
|
||||||
|
%patch6 -p0
|
||||||
%patch2000 -p1
|
%patch2000 -p1
|
||||||
%patch2001 -p1
|
%patch2001 -p1
|
||||||
%patch2002 -p1
|
%patch2002 -p1
|
||||||
@ -176,6 +187,10 @@ handling.
|
|||||||
%patch2011 -p1
|
%patch2011 -p1
|
||||||
%patch2012 -p1
|
%patch2012 -p1
|
||||||
%patch2013 -p1
|
%patch2013 -p1
|
||||||
|
%patch2014 -p1
|
||||||
|
%patch2015 -p1
|
||||||
|
%patch2016 -p1
|
||||||
|
%patch2017 -p1
|
||||||
|
|
||||||
# be sure not to use them
|
# be sure not to use them
|
||||||
rm -r src/3rdparty/{libjpeg,freetype,libpng,zlib}
|
rm -r src/3rdparty/{libjpeg,freetype,libpng,zlib}
|
||||||
@ -541,10 +556,10 @@ Summary: Qt 5 SQL related libraries - development files
|
|||||||
Group: Development/Libraries/C and C++
|
Group: Development/Libraries/C and C++
|
||||||
Requires: libQt5Core-devel = %{version}
|
Requires: libQt5Core-devel = %{version}
|
||||||
Requires: libQt5Sql5 = %{version}
|
Requires: libQt5Sql5 = %{version}
|
||||||
Requires: libQt5Sql5-mysql = %{version}
|
Suggests: libQt5Sql5-mysql = %{version}
|
||||||
Requires: libQt5Sql5-postgresql = %{version}
|
Suggests: libQt5Sql5-postgresql = %{version}
|
||||||
Requires: libQt5Sql5-sqlite = %{version}
|
Suggests: libQt5Sql5-sqlite = %{version}
|
||||||
Requires: libQt5Sql5-unixODBC = %{version}
|
Suggests: libQt5Sql5-unixODBC = %{version}
|
||||||
|
|
||||||
%description -n libQt5Sql-devel
|
%description -n libQt5Sql-devel
|
||||||
Qt 5 libraries which are used for connection with an SQL server. You
|
Qt 5 libraries which are used for connection with an SQL server. You
|
||||||
@ -783,6 +798,10 @@ find %{buildroot}/%{libqt5_libdir} -type f -name '*pc' -print -exec perl -pi -e
|
|||||||
find %{buildroot}/%{libqt5_libdir}/ -name 'lib*.a' -exec chmod -x -- {} \;
|
find %{buildroot}/%{libqt5_libdir}/ -name 'lib*.a' -exec chmod -x -- {} \;
|
||||||
# kill .la files
|
# kill .la files
|
||||||
rm -f %{buildroot}%{libqt5_libdir}/lib*.la
|
rm -f %{buildroot}%{libqt5_libdir}/lib*.la
|
||||||
|
|
||||||
|
#
|
||||||
|
rm -fv %{buildroot}%{libqt5_libdir}/cmake/Qt5*/Q*Plugin.cmake
|
||||||
|
|
||||||
mkdir -p %{buildroot}/%{libqt5_plugindir}/sqldrivers
|
mkdir -p %{buildroot}/%{libqt5_plugindir}/sqldrivers
|
||||||
|
|
||||||
# put all the binaries to %{_bindir}, add -qt5 suffix, and symlink them back to %_qt5_bindir
|
# put all the binaries to %{_bindir}, add -qt5 suffix, and symlink them back to %_qt5_bindir
|
||||||
|
Loading…
Reference in New Issue
Block a user