From c58a690bf1b7a978ca8042fd1b8bd01b945a3bd5 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Wed, 11 Mar 2020 22:26:41 +0000 Subject: [PATCH] Add error checking to jt9 process control by .lock/.quit files --- widgets/mainwindow.cpp | 85 ++++++++++++++++++++++++++++++++++++------ widgets/mainwindow.h | 4 ++ 2 files changed, 78 insertions(+), 11 deletions(-) diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 7119ff17a..b12195ad4 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -845,8 +845,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, } } - //Create .lock so jt9 will wait - QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.open(QIODevice::ReadWrite); + pause_jt9 (); QStringList jt9_args { "-s", QApplication::applicationName () // shared memory key, @@ -1040,6 +1039,75 @@ void MainWindow::on_the_minute () } } +void MainWindow::pause_jt9 () +{ + // Create .lock so jt9 will wait + QFile l {m_config.temp_dir ().absoluteFilePath (".lock")}; + if (!l.open(QFile::ReadWrite)) + { + MessageBox::warning_message (this, tr ("Error creating \"%1\" - %2").arg (l.fileName ()).arg (l.errorString ())); + } +} + +void MainWindow::release_jt9 () +{ + // Remove .lock so jt9 will continue + QFile l {m_config.temp_dir ().absoluteFilePath (".lock")}; + while (l.exists ()) + { + if (!l.remove ()) + { + MessageBox::query_message (this + , tr ("Error removing \"%1\" - %2").arg (l.fileName ()).arg (l.errorString ()) + , tr ("Click OK to retry")); + } + } +} + +void MainWindow::stop_jt9 () +{ + // Create .quit so jt9 will exit + QFile q {m_config.temp_dir ().absoluteFilePath (".quit")}; + while (!q.exists ()) + { + if (!q.open (QFile::ReadWrite)) + { + MessageBox::query_message (this + , tr ("Error creating \"%1\" - %2").arg (q.fileName ()).arg (q.errorString ()) + , tr ("Click OK to retry")); + } + } + release_jt9 (); + if (!proc_jt9.waitForFinished(1000)) + { + proc_jt9.close(); + } + while (q.exists ()) + { + if (!q.remove ()) + { + MessageBox::query_message (this + , tr ("Error removing \"%1\" - %2").arg (q.fileName ()).arg (q.errorString ()) + , tr ("Click OK to retry")); + } + } +} + +void MainWindow::cleanup_jt9 () +{ + // Remove .quit as no longer needed + QFile l {m_config.temp_dir ().absoluteFilePath (".lock")}; + while (l.exists ()) + { + if (!l.remove ()) + { + MessageBox::query_message (this + , tr ("Error removing \"%1\" - %2").arg (l.fileName ()).arg (l.errorString ()) + , tr ("Click OK to retry")); + } + } +} + //--------------------------------------------------- MainWindow destructor MainWindow::~MainWindow() { @@ -2367,12 +2435,7 @@ void MainWindow::closeEvent(QCloseEvent * e) int irow=-99; plotsave_(&sw,&nw,&nh,&irow); mem_jt9->detach(); - QFile quitFile {m_config.temp_dir ().absoluteFilePath (".quit")}; - quitFile.open(QIODevice::ReadWrite); - QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.remove(); // Allow jt9 to terminate - bool b=proc_jt9.waitForFinished(1000); - if(!b) proc_jt9.close(); - quitFile.remove(); + stop_jt9 (); Q_EMIT finished (); QMainWindow::closeEvent (e); } @@ -3020,7 +3083,7 @@ void MainWindow::decode() //decode() to_jt9(m_ihsym); //Send m_ihsym to jt9[.exe] if(m_ihsym>=m_hsymStop) m_bStart3=true; } - QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.remove (); // Allow jt9 to start + release_jt9 (); auto now = QDateTime::currentDateTimeUtc(); double tseq = fmod(double(now.toMSecsSinceEpoch() ),1000.0*m_TRperiod)/1000.0; @@ -3093,7 +3156,7 @@ void MainWindow::decodeDone () dec_data.params.nagain=0; dec_data.params.ndiskdat=0; m_nclearave=0; - QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.open(QIODevice::ReadWrite); + pause_jt9 (); ui->DecodeButton->setChecked (false); decodeBusy(false); m_RxLog=0; @@ -8118,7 +8181,7 @@ void MainWindow::on_cbMenus_toggled(bool b) void MainWindow::on_cbCQonly_toggled(bool) { - QFile {m_config.temp_dir().absoluteFilePath(".lock")}.remove(); // Allow jt9 to start + release_jt9 (); decodeBusy(true); } diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index d0e35e72e..f7cd7862f 100644 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -770,6 +770,10 @@ private: void writeFoxQSO (QString const& msg); void to_jt9(qint32 n); qint32 from_jt9(); + void pause_jt9 (); + void release_jt9 (); + void stop_jt9 (); + void cleanup_jt9 (); }; extern int killbyname(const char* progName);