Mercurial > octave
changeset 25678:3418d3729a51
use exisitng mutex in octave_qt_link for changing gui preferences (bug #54369)
* main-window.cc (construct_octave_qt_link): signal gui_preference_signal
and related slot wihtout mutex as argument;
(gui_preference): mutex not passed via arguments, use lock/unlock and
wake_all of m_octave_qt_link instead
* main-window.h: slot gui_preference wihtout mutex as argument
* octave-qt-link.cc (do_gui_preference): no new mutex required, signal
gui_preference_signal without mutex pointer, use internal lock, wait and
unlock
* octave-qt-link.h: gui_preference_signal without mutey pointer
author | Torsten <mttl@mailbox.org> |
---|---|
date | Thu, 26 Jul 2018 20:04:17 +0200 |
parents | 5401dfadd2f6 |
children | 4596a80cbc18 |
files | libgui/src/main-window.cc libgui/src/main-window.h libgui/src/octave-qt-link.cc libgui/src/octave-qt-link.h |
diffstat | 4 files changed, 19 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/main-window.cc Thu Jul 26 19:52:28 2018 +0200 +++ b/libgui/src/main-window.cc Thu Jul 26 20:04:17 2018 +0200 @@ -1984,10 +1984,9 @@ connect (m_octave_qt_link, SIGNAL (gui_preference_signal (const QString&, const QString&, - QMutex*, QString*)), - this, - SLOT (gui_preference (const QString&, const QString&, - QMutex*, QString*))); + QString*)), + this, SLOT (gui_preference (const QString&, const QString&, + QString*))); connect (m_octave_qt_link, SIGNAL (edit_file_signal (const QString&)), @@ -2494,19 +2493,23 @@ } void main_window::gui_preference (const QString& key, const QString& value, - QMutex* wait_for_gui, QString* read_value) + QString* read_value) { QSettings *settings = resource_manager::get_settings (); - *read_value = settings->value (key).toString (); + // Wait for worker to suspend + m_octave_qt_link->lock (); + if (! value.isEmpty ()) { settings->setValue (key, QVariant (value)); emit settings_changed (settings); } - wait_for_gui->unlock (); // data is ready, resume worker threat + // We are done: Unlock and wake the worker thread + m_octave_qt_link->unlock (); + m_octave_qt_link->wake_all (); } void main_window::save_workspace_callback (const std::string& file)
--- a/libgui/src/main-window.h Thu Jul 26 19:52:28 2018 +0200 +++ b/libgui/src/main-window.h Thu Jul 26 20:04:17 2018 +0200 @@ -241,7 +241,7 @@ const QString& multimode); void gui_preference (const QString& key, const QString& value, - QMutex* wait_for_gui, QString* read_value); + QString* read_value); void handle_show_doc (const QString& file); void handle_register_doc (const QString& file); void handle_unregister_doc (const QString& file);
--- a/libgui/src/octave-qt-link.cc Thu Jul 26 19:52:28 2018 +0200 +++ b/libgui/src/octave-qt-link.cc Thu Jul 26 20:04:17 2018 +0200 @@ -576,22 +576,18 @@ std::string octave_qt_link::do_gui_preference (const std::string& key, const std::string& value) { - QMutex wait_for_gui; QString pref_value; + // Lock the mutex before signaling + lock (); + // Emit the signal for changing or getting a preference emit gui_preference_signal (QString::fromStdString (key), - QString::fromStdString (value), - &wait_for_gui, &pref_value); + QString::fromStdString (value), &pref_value); - // Unlock and lock the mutex (make sure it is locked without being blocked) - wait_for_gui.unlock (); - wait_for_gui.lock (); - - // Try to lock it again, thus waiting for the unlock of the gui after - // reading/changing desired preference. A timeout of 3 s for not being - // blocked forever if something goes wrong - wait_for_gui.tryLock (3000); + // Wait for the GUI and unlock when resumed + wait (); + unlock (); return pref_value.toStdString (); }
--- a/libgui/src/octave-qt-link.h Thu Jul 26 19:52:28 2018 +0200 +++ b/libgui/src/octave-qt-link.h Thu Jul 26 20:04:17 2018 +0200 @@ -195,8 +195,7 @@ void show_preferences_signal (void); - void gui_preference_signal (const QString&, const QString&, - QMutex*, QString*); + void gui_preference_signal (const QString&, const QString&, QString*); void show_doc_signal (const QString& file);