diff options
author | Kai Kang <kai.kang@windriver.com> | 2015-06-02 09:52:57 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-06-08 17:30:50 +0100 |
commit | 4d033fdc5e754e22edb2e9074e30e58847c4b791 (patch) | |
tree | 85189088f467605738c715ae5b2dcdc78c729354 /meta/recipes-qt/qt4/qt4-4.8.7/Fix-QWSLock-invalid-argument-logs.patch | |
parent | 3b1d89a51445cf526ca84eb5b53de434f9585d6e (diff) | |
download | openembedded-core-contrib-4d033fdc5e754e22edb2e9074e30e58847c4b791.tar.gz |
qt4: upgrade to 4.8.7
Upgrade qt4 packages from version 4.8.6 to 4.8.7.
* remove arm64 related patches which are merged
* remove 0034-Fix-a-division-by-zero-when-processing-malformed-BMP.patch
which is backported.
* update 0010-configure-Hack-to-not-use-the-pg_config-of-the-host-.patch
and 0013-configure-add-crossarch-option.patch for new version
* remove useless variable INC_PR
Signed-off-by: Kai Kang <kai.kang@windriver.com>
Diffstat (limited to 'meta/recipes-qt/qt4/qt4-4.8.7/Fix-QWSLock-invalid-argument-logs.patch')
-rw-r--r-- | meta/recipes-qt/qt4/qt4-4.8.7/Fix-QWSLock-invalid-argument-logs.patch | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/meta/recipes-qt/qt4/qt4-4.8.7/Fix-QWSLock-invalid-argument-logs.patch b/meta/recipes-qt/qt4/qt4-4.8.7/Fix-QWSLock-invalid-argument-logs.patch new file mode 100644 index 0000000000..1f5f00f716 --- /dev/null +++ b/meta/recipes-qt/qt4/qt4-4.8.7/Fix-QWSLock-invalid-argument-logs.patch @@ -0,0 +1,98 @@ +From 52c34001bad85c3032618070b1d6b2a3c6880715 Mon Sep 17 00:00:00 2001 +From: Neil Jerram <n...@ossau.homelinux.net> +Date: Thu, 8 Nov 2012 08:18:32 +0000 +Subject: [PATCH] Fix QWSLock "invalid argument" logs + +There was no known actual problem associated with these logs, but they +were spamming the log, so I thought it worth trying to understand and +fix them. + +The confusion is that there are two different ways of creating QWSLock +objects. "QWSLock()" creates an object that creates a new set of +semaphores, whereas "QWSLock(id)" creates an object that aliases the +existing set of semaphores with ID id. What seems to happen is that +each application creates a semaphore set scoped to that +application (QWSDisplay::Data::clientLock in qapplication_qws.cpp), +then this semaphore set is passed by complex means to +places (QWSClientPrivate and QWSMemorySurface) that use the semaphores +for a short period and then delete their QWSLock objects. + +The problem was that the QWSLock destructor always destroyed the +semaphore set, even when that QWSLock hadn't create the semaphores +itself, hence making the semaphores invalid for other QWSLock objects +still referencing the same set. + +Clearly a QWSLock object shouldn't destroy the semaphore set if it +didn't create it itself, and that is confirmed by the fact that one of +the implementations inside QWSLock already implements this logic, with +the 'owned' flag. The fix is to implement this for the #ifndef +QT_POSIX_IPC case - which is what is used in QtMoko - just as is +already implemented for the #ifdef QT_POSIX_IPC case. + +Original patch can be found here: + http://www.mail-archive.com/community@lists.openmoko.org/msg65512.html + +Upstream-Status: Submitted + +Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl> + (Removed the commented-out debug statements from the original patch.) + +--- + +diff --git a/src/gui/embedded/qwslock.cpp b/src/gui/embedded/qwslock.cpp +index 9914a24..1055785 100644 +--- a/src/gui/embedded/qwslock.cpp ++++ b/src/gui/embedded/qwslock.cpp +@@ -83,9 +83,12 @@ QWSLock::QWSLock(int id) : semId(id) + QWSSignalHandler::instance()->addWSLock(this); + #endif + ++ owned = false; ++ + #ifndef QT_POSIX_IPC + if (semId == -1) { + semId = semget(IPC_PRIVATE, 3, IPC_CREAT | 0666); ++ owned = true; + if (semId == -1) { + perror("QWSLock::QWSLock"); + qFatal("Unable to create semaphore"); +@@ -100,7 +104,6 @@ QWSLock::QWSLock(int id) : semId(id) + } + #else + sems[0] = sems[1] = sems[2] = SEM_FAILED; +- owned = false; + + if (semId == -1) { + // ### generate really unique IDs +@@ -134,9 +137,11 @@ QWSLock::~QWSLock() + + if (semId != -1) { + #ifndef QT_POSIX_IPC +- qt_semun semval; +- semval.val = 0; +- semctl(semId, 0, IPC_RMID, semval); ++ if (owned) { ++ qt_semun semval; ++ semval.val = 0; ++ semctl(semId, 0, IPC_RMID, semval); ++ } + semId = -1; + #else + // emulate the SEM_UNDO behavior for the BackingStore lock +diff --git a/src/gui/embedded/qwslock_p.h b/src/gui/embedded/qwslock_p.h +index d324e4f..d867d20 100644 +--- a/src/gui/embedded/qwslock_p.h ++++ b/src/gui/embedded/qwslock_p.h +@@ -86,8 +86,8 @@ private: + int lockCount[2]; + #ifdef QT_POSIX_IPC + sem_t *sems[3]; +- bool owned; + #endif ++ bool owned; + }; + + QT_END_NAMESPACE + +-- +1.7.10.4 |