X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.cpp;h=b103b42d80c5f7096f55ea62948f20c70a738a5d;hp=7d20fa7ef62864e1ce5bb5c74b1dbbfe25e1c651;hb=9f2fbea7c308914d0b737ec9a936a004d4687223;hpb=fbb06e36ee772862c0d70ab43c9000225e9f8c42 diff --git a/src/core/core.cpp b/src/core/core.cpp index 7d20fa7e..b103b42d 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -81,6 +81,12 @@ Core::Core() delete _instance; } _instance = this; + + // Parent all QObject-derived attributes, so when the Core instance gets moved into another + // thread, they get moved with it + _server.setParent(this); + _v6server.setParent(this); + _storageSyncTimer.setParent(this); } @@ -105,7 +111,8 @@ bool Core::init() CoreSettings s; if (s.version() != 1) { qCritical() << "Invalid core settings version, terminating!"; - exit(EXIT_FAILURE); + QCoreApplication::exit(EXIT_FAILURE); + return false; } // Set up storage and authentication backends @@ -149,13 +156,15 @@ bool Core::init() } if (Quassel::isOptionSet("select-backend") || Quassel::isOptionSet("select-authenticator")) { + bool success{true}; if (Quassel::isOptionSet("select-backend")) { - selectBackend(Quassel::optionValue("select-backend")); + success &= selectBackend(Quassel::optionValue("select-backend")); } if (Quassel::isOptionSet("select-authenticator")) { - selectAuthenticator(Quassel::optionValue("select-authenticator")); + success &= selectAuthenticator(Quassel::optionValue("select-authenticator")); } - exit(EXIT_SUCCESS); + QCoreApplication::exit(success ? EXIT_SUCCESS : EXIT_FAILURE); + return success; } if (!_configured) { @@ -165,7 +174,8 @@ bool Core::init() if (!_configured) { qWarning() << "Cannot configure from environment"; - exit(EXIT_FAILURE); + QCoreApplication::exit(EXIT_FAILURE); + return false; } } else { @@ -175,12 +185,14 @@ bool Core::init() << qPrintable(tr("Currently, Quassel supports SQLite3 and PostgreSQL. You need to build your\n" "Qt library with the sqlite or postgres plugin enabled in order for quasselcore\n" "to work.")); - exit(EXIT_FAILURE); // TODO make this less brutal (especially for mono client -> popup) + QCoreApplication::exit(EXIT_FAILURE); // TODO make this less brutal (especially for mono client -> popup) + return false; } if (writeError) { qWarning() << "Cannot write quasselcore configuration; probably a permission problem."; - exit(EXIT_FAILURE); + QCoreApplication::exit(EXIT_FAILURE); + return false; } quInfo() << "Core is currently not configured! Please connect with a Quassel Client for basic setup."; @@ -188,11 +200,15 @@ bool Core::init() } else { if (Quassel::isOptionSet("add-user")) { - exit(createUser() ? EXIT_SUCCESS : EXIT_FAILURE); + bool success = createUser(); + QCoreApplication::exit(success ? EXIT_SUCCESS : EXIT_FAILURE); + return success; } if (Quassel::isOptionSet("change-userpass")) { - exit(changeUserPass(Quassel::optionValue("change-userpass")) ? EXIT_SUCCESS : EXIT_FAILURE); + bool success = changeUserPass(Quassel::optionValue("change-userpass")); + QCoreApplication::exit(success ? EXIT_SUCCESS : EXIT_FAILURE); + return success; } _strictIdentEnabled = Quassel::isOptionSet("strict-ident"); @@ -222,7 +238,8 @@ bool Core::init() connect(&_v6server, SIGNAL(newConnection()), this, SLOT(incomingConnection())); if (!startListening()) { - exit(EXIT_FAILURE); // TODO make this less brutal + QCoreApplication::exit(EXIT_FAILURE); // TODO make this less brutal + return false; } if (_configured && !Quassel::isOptionSet("norestore")) { @@ -392,8 +409,9 @@ bool Core::initStorage(const QString &backend, const QVariantMap &settings, // if initialization wasn't successful, we quit to keep from coming up unconfigured case Storage::NotAvailable: qCritical() << "FATAL: Selected storage backend is not available:" << backend; - if (!setup) - exit(EXIT_FAILURE); + if (!setup) { + QCoreApplication::exit(EXIT_FAILURE); + } return false; case Storage::IsReady: @@ -491,8 +509,9 @@ bool Core::initAuthenticator(const QString &backend, const QVariantMap &settings // if initialization wasn't successful, we quit to keep from coming up unconfigured case Authenticator::NotAvailable: qCritical() << "FATAL: Selected auth backend is not available:" << backend; - if (!setup) - exit(EXIT_FAILURE); + if (!setup) { + QCoreApplication::exit(EXIT_FAILURE); + } return false; case Authenticator::IsReady: