From 917d2b38699d8e8c24d32bd88fade4c84b9aabc1 Mon Sep 17 00:00:00 2001 From: guinux <nuxgui@gmail.com> Date: Sat, 15 Jun 2019 16:07:40 +0200 Subject: [PATCH] fix lock troubles --- src/alpm_utils.vala | 4 ++++ src/cli.vala | 8 +------- src/manager_window.vala | 13 ++++--------- src/system_daemon.vala | 24 +++++++++++++++--------- 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/alpm_utils.vala b/src/alpm_utils.vala index 17ef45fb..1695f9a5 100644 --- a/src/alpm_utils.vala +++ b/src/alpm_utils.vala @@ -726,6 +726,10 @@ namespace Pamac { success = false; } } + if (cancellable.is_cancelled ()) { + trans_release (); + return false; + } return success; } diff --git a/src/cli.vala b/src/cli.vala index 72493a03..a2bfb69e 100644 --- a/src/cli.vala +++ b/src/cli.vala @@ -585,12 +585,6 @@ namespace Pamac { transaction = new TransactionCli (database); transaction.finished.connect (on_transaction_finished); transaction.sysupgrade_finished.connect (on_transaction_finished); - transaction.start_preparing.connect (() => { - trans_cancellable = true; - }); - transaction.stop_preparing.connect (() => { - trans_cancellable = false; - }); transaction.start_downloading.connect (() => { trans_cancellable = true; }); @@ -623,7 +617,7 @@ namespace Pamac { } else { stdout.printf ("\n"); } - return false; + return true; } int get_term_width () { diff --git a/src/manager_window.vala b/src/manager_window.vala index 2093dcad..8b547b46 100644 --- a/src/manager_window.vala +++ b/src/manager_window.vala @@ -2646,12 +2646,8 @@ namespace Pamac { [GtkCallback] void on_preferences_button_clicked () { - if (transaction.get_lock ()) { - this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - run_preferences_dialog (); - } else { - transaction.display_error (dgettext (null, "Waiting for another package manager to quit"), {}); - } + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + run_preferences_dialog (); } public void run_preferences_dialog () { @@ -2670,7 +2666,6 @@ namespace Pamac { } void on_run_preferences_dialog_finished () { - transaction.unlock (); if (browse_stack.visible_child_name == "updates") { database.get_updates.begin (on_get_updates_finished); origin_stack.visible_child_name = "checking"; @@ -2752,7 +2747,7 @@ namespace Pamac { this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); sysupgrade_running = true; apply_button.sensitive = false; - cancel_button.sensitive = true; + cancel_button.sensitive = false; string[] temp_ign_pkgs = {}; foreach (unowned string name in temporary_ignorepkgs) { temp_ign_pkgs += name; @@ -2854,7 +2849,7 @@ namespace Pamac { void on_start_preparing () { this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); - cancel_button.sensitive = true; + cancel_button.sensitive = false; } void on_stop_preparing () { diff --git a/src/system_daemon.vala b/src/system_daemon.vala index 44c55fc6..664deec4 100644 --- a/src/system_daemon.vala +++ b/src/system_daemon.vala @@ -111,9 +111,13 @@ namespace Pamac { downloading_updates_finished (); }); alpm_utils.trans_prepare_finished.connect ((success) => { + if (!success) { + unlock_priv (); + } trans_prepare_finished (success); }); alpm_utils.trans_commit_finished.connect ((success) => { + unlock_priv (); database_modified (); trans_commit_finished (success); }); @@ -242,17 +246,13 @@ namespace Pamac { public bool unlock (GLib.BusName sender) throws Error { if (lock_id == sender) { - lock_id = new BusName (""); - authorized = false; + unlock_priv (); return true; } return false; } private async bool check_authorization (GLib.BusName sender) { - if (lock_id != sender) { - return false; - } if (authorized) { return true; } @@ -387,10 +387,6 @@ namespace Pamac { } public void start_refresh (bool force, GLib.BusName sender) throws Error { - if (lock_id != sender) { - refresh_finished (false); - return; - } alpm_utils.force_refresh = force; if (alpm_utils.downloading_updates) { alpm_utils.cancellable.cancel (); @@ -520,6 +516,9 @@ namespace Pamac { } public void start_trans_commit (GLib.BusName sender) throws Error { + if (lock_id != sender) { + return; + } check_authorization.begin (sender, (obj, res) => { bool authorized = check_authorization.end (res); if (authorized) { @@ -540,6 +539,7 @@ namespace Pamac { return; } alpm_utils.trans_release (); + unlock_priv (); } public void trans_cancel (GLib.BusName sender) throws Error { @@ -547,6 +547,12 @@ namespace Pamac { return; } alpm_utils.trans_cancel (); + unlock_priv (); + } + + private void unlock_priv () { + lock_id = new BusName (""); + authorized = false; } [DBus (no_reply = true)] -- GitLab