mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-06-12 23:23:14 +02:00
CLI: disable async crash-recovery backup in headless mode (fixes segfault)
QETProject schedules an asynchronous crash-recovery backup on construction (writeBackup() -> QtConcurrent::run(QET::writeToFile, ..., &m_backup_file)). In one-shot CLI mode the QETProject is destroyed as soon as the command returns, while that background write still references its m_backup_file member — an intermittent use-after-free segfault during teardown (~1 in 6 runs; observed on --resave and --set-titleblock). A crash-recovery backup is meaningless for a short-lived headless command, so add QETProject::setBackupEnabled(false), called from the CLI entry in main(). writeBackup() then early-returns, so no background write is ever launched. Fixes the crash for all CLI commands. See #492.
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "machine_info.h"
|
||||
#include "qet.h"
|
||||
#include "qetapp.h"
|
||||
#include "qetproject.h"
|
||||
#include "singleapplication.h"
|
||||
#include "utils/macosxopenevent.h"
|
||||
#include "utils/qetsettings.h"
|
||||
@@ -206,6 +207,10 @@ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(QetSettings::hdpiScaleFacto
|
||||
raw_args << QString::fromLocal8Bit(argv[i]);
|
||||
if (CLIExport::isExportRequest(raw_args)) {
|
||||
QApplication export_app(argc, argv);
|
||||
// No crash-recovery backups in one-shot CLI mode: the backup write
|
||||
// runs on a background thread referencing the project and races the
|
||||
// process exit (intermittent segfault in QET::writeToFile).
|
||||
QETProject::setBackupEnabled(false);
|
||||
return CLIExport::run(export_app.arguments());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user