summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-08-16 15:22:54 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-08-16 15:22:54 (GMT)
commit6ddda99db20203917229e399c4b8d333a119c3d6 (patch)
treec5293f9229b1f4d9fb4a5a5cf979f38fd54795ce
parent7e395e4f5a89dd43d1b7b88f12e0fa4107756d54 (diff)
parent7cfc9f2245162944f3d9a29ad73cd93e2bcf197f (diff)
downloadQt-6ddda99db20203917229e399c4b8d333a119c3d6.zip
Qt-6ddda99db20203917229e399c4b8d333a119c3d6.tar.gz
Qt-6ddda99db20203917229e399c4b8d333a119c3d6.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public: Fix QProcessManager destruction Fix "installer_sis" and "deploy" targets when TARGET has path Fix for memory leak in qt_init Fix check to remove unnecessary deployments in Symbian
-rw-r--r--mkspecs/features/sis_targets.prf5
-rw-r--r--qmake/generators/symbian/initprojectdeploy_symbian.cpp6
-rw-r--r--src/corelib/io/qprocess_symbian.cpp47
-rw-r--r--src/gui/kernel/qapplication_s60.cpp2
4 files changed, 37 insertions, 23 deletions
diff --git a/mkspecs/features/sis_targets.prf b/mkspecs/features/sis_targets.prf
index 99f5910..abdf2d4 100644
--- a/mkspecs/features/sis_targets.prf
+++ b/mkspecs/features/sis_targets.prf
@@ -11,7 +11,6 @@ else:!equals(DEPLOYMENT, default_deployment) {
equals(GENERATE_SIS_TARGETS, true) {
symbian-abld|symbian-sbsv2 {
- sis_destdir =
make_cache_name = .make.cache
sis_target.target = sis
sis_target.commands = $(if $(wildcard $$basename(TARGET)_template.pkg), \
@@ -50,7 +49,7 @@ equals(GENERATE_SIS_TARGETS, true) {
ok_unsigned_sis_target.target = ok_unsigned_sis
ok_unsigned_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) -o $$basename(TARGET)_template.pkg $(QT_SIS_TARGET)
- target_sis_target.target = $${sis_destdir}$${TARGET}.sis
+ target_sis_target.target = $$basename(TARGET).sis
target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis
installer_sis_target.target = installer_sis
@@ -59,7 +58,7 @@ equals(GENERATE_SIS_TARGETS, true) {
, \
$(MAKE) -f $(MAKEFILE) fail_sis_nopkg \
)
- installer_sis_target.depends = $${sis_destdir}$${TARGET}.sis
+ installer_sis_target.depends = $$basename(TARGET).sis
ok_installer_sis_target.target = ok_installer_sis
ok_installer_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) $$basename(TARGET)_installer.pkg - \
diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
index 382e012..776a646 100644
--- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp
+++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
@@ -353,7 +353,11 @@ void initProjectDeploySymbian(QMakeProject* project,
CopyItem &item = i.next();
QFileInfo fromItem(item.from);
QFileInfo toItem(item.to);
- if (fromItem == toItem)
+#if defined(Q_OS_WIN)
+ if (0 == fromItem.absoluteFilePath().compare(toItem.absoluteFilePath(), Qt::CaseInsensitive))
+#else
+ if (0 == fromItem.absoluteFilePath().compare(toItem.absoluteFilePath()))
+#endif
i.remove();
}
}
diff --git a/src/corelib/io/qprocess_symbian.cpp b/src/corelib/io/qprocess_symbian.cpp
index af657b2..003e781 100644
--- a/src/corelib/io/qprocess_symbian.cpp
+++ b/src/corelib/io/qprocess_symbian.cpp
@@ -375,10 +375,9 @@ QProcessActive::QProcessActive()
// Nothing to do
}
-// Called from ProcessManagerThread
+// Called from main thread
QProcessActive::~QProcessActive()
{
- Cancel();
process = NULL;
pproc = NULL;
}
@@ -482,10 +481,9 @@ QProcessManagerMediator::QProcessManagerMediator()
// Nothing to do
}
-// Called from ProcessManagerThread
+// Called from main thread
QProcessManagerMediator::~QProcessManagerMediator()
{
- Cancel();
processManagerThread.Close();
currentCommand = ENoCommand;
currentObserver = NULL;
@@ -648,25 +646,36 @@ QProcessManager::QProcessManager()
QProcessManager::~QProcessManager()
{
QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager()");
- // Cancel death listening for all child processes
- if (mediator) {
- QMap<int, QProcessActive *>::Iterator it = children.begin();
- while (it != children.end()) {
- // Remove all monitors
- QProcessActive *active = it.value();
- mediator->remove(active);
-
- QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager() removed listening for a process");
- ++it;
+
+ // Check if manager thread is still alive. If this destructor is ran as part of global
+ // static cleanup, manager thread will most likely be terminated by kernel at this point,
+ // so trying to delete QProcessActives and QProcessMediators will panic as they
+ // will still be active. They can also no longer be canceled as the thread is already gone.
+ // In case manager thread has already died, we simply do nothing and let the deletion of
+ // the main heap at process exit take care of stray objects.
+
+ if (managerThread.Handle() && managerThread.ExitType() == EExitPending) {
+ // Cancel death listening for all child processes
+ if (mediator) {
+ QMap<int, QProcessActive *>::Iterator it = children.begin();
+ while (it != children.end()) {
+ // Remove all monitors
+ QProcessActive *active = it.value();
+ mediator->remove(active);
+
+ QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager() removed listening for a process");
+ ++it;
+ }
+
+ // Terminate process manager thread.
+ mediator->terminate();
+ delete mediator;
}
- // Terminate process manager thread.
- mediator->terminate();
- delete mediator;
+ qDeleteAll(children.values());
+ children.clear();
}
- qDeleteAll(children.values());
- children.clear();
managerThread.Close();
managerMutex.Close();
}
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index e64ebb1..559bb6a 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1475,6 +1475,8 @@ void qt_init(QApplicationPrivate * /* priv */, int)
S60->avkonComponentsSupportTransparency = (value==1) ? true : false;
}
}
+ delete repository;
+ repository = 0;
#endif
#ifdef QT_KEYPAD_NAVIGATION