Return-Path: Received: from mail.integraonline.com (relay3.integra.net [204.130.255.182]) by yocto-www.yoctoproject.org (Postfix) with SMTP id 576D8E01590 for ; Mon, 12 Aug 2013 15:13:02 -0700 (PDT) Received: (qmail 17462 invoked from network); 12 Aug 2013 22:13:02 -0000 Received: from unknown (HELO ericsam.example.org) (70.96.116.236) by relay3.integra.net with SMTP; 12 Aug 2013 22:13:02 -0000 From: Eric Nelson To: meta-freescale@yoctoproject.org Date: Mon, 12 Aug 2013 15:12:56 -0700 Message-Id: <1376345576-17366-1-git-send-email-eric.nelson@boundarydevices.com> X-Mailer: git-send-email 1.8.1.2 Cc: neil@ossau.homelinux.net Subject: [meta-fsl-arm][PATCH] recipes-qt: add fix for QWSLock on qt4e X-BeenThere: meta-freescale@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Usage and development list for the meta-fsl-* layers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Aug 2013 22:13:03 -0000 This patch adds a patch for Qt-Embedded to only destroy semaphores in the process which created them. Original patch by Neil Jerram for the OpenMoko project: http://lists.openmoko.org/pipermail/community/2012-November/067806.html See also Bug 31254: https://bugreports.qt-project.org/browse/QTBUG-31254 Signed-off-by: Eric Nelson --- recipes-qt/qt4/qt4-embedded_4.8.5.bbappend | 10 ++- ...-Only-destroy-semaphores-in-process-owner.patch | 77 ++++++++++++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 recipes-qt/qt4/qt4/0001-QWSLock-Only-destroy-semaphores-in-process-owner.patch diff --git a/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend b/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend index 4c4d0c9..05a6925 100644 --- a/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend +++ b/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend @@ -1,8 +1,14 @@ #Freescale FILESEXTRAPATHS_prepend := "${THISDIR}/qt4:" -SRC_URI_append_mx5 += "file://0001-Add-support-for-i.MX-codecs-to-phonon.patch" -SRC_URI_append_mx6 += "file://0001-Add-support-for-i.MX-codecs-to-phonon.patch" +SRC_URI_append_mx5 += "\ + file://0001-Add-support-for-i.MX-codecs-to-phonon.patch \ + file://0001-QWSLock-Only-destroy-semaphores-in-process-owner.patch \ +" +SRC_URI_append_mx6 += "\ + file://0001-Add-support-for-i.MX-codecs-to-phonon.patch \ + file://0001-QWSLock-Only-destroy-semaphores-in-process-owner.patch \ +" DEPENDS_append_mx5 = " virtual/kernel virtual/libgles2" PACKAGE_ARCH_mx5 = "${MACHINE_ARCH}" diff --git a/recipes-qt/qt4/qt4/0001-QWSLock-Only-destroy-semaphores-in-process-owner.patch b/recipes-qt/qt4/qt4/0001-QWSLock-Only-destroy-semaphores-in-process-owner.patch new file mode 100644 index 0000000..d67a746 --- /dev/null +++ b/recipes-qt/qt4/qt4/0001-QWSLock-Only-destroy-semaphores-in-process-owner.patch @@ -0,0 +1,77 @@ +From 9af565935d16ecf8a8c04b5ea850ddb34a7c1294 Mon Sep 17 00:00:00 2001 +From: Eric Nelson +Date: Mon, 12 Aug 2013 11:54:05 -0700 +Subject: [PATCH] QWSLock: Only destroy semaphores in process owner + +This fixes the case when QT_POSIX_IPC is not defined. + +Original patch by Neil Jerram for the OpenMoko project: + http://lists.openmoko.org/pipermail/community/2012-November/067806.html + +See also Bug 31254: + https://bugreports.qt-project.org/browse/QTBUG-31254 + +Signed-off-by: Eric Nelson +--- + src/gui/embedded/qwslock.cpp | 13 +++++++++---- + src/gui/embedded/qwslock_p.h | 2 +- + 2 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/src/gui/embedded/qwslock.cpp b/src/gui/embedded/qwslock.cpp +index 3f8f306..cd6a48d 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 +103,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 +136,12 @@ 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 ead7b89..d16b3d5 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.8.1.2 + -- 1.8.1.2