aboutsummaryrefslogtreecommitdiff
path: root/src/music-player-bridge.vala
diff options
context:
space:
mode:
authorKen VanDine <ken.vandine@canonical.com>2012-03-30 14:12:41 -0400
committerKen VanDine <ken.vandine@canonical.com>2012-03-30 14:12:41 -0400
commit66d95fc3a6a73357578051739dd58b5622ceffd6 (patch)
treeb5bcad02ebe6ad24428dfb9544e3bcf08871b44e /src/music-player-bridge.vala
parentd738d091793595d86f1a2353b06bf3584b0afbf9 (diff)
parent31b5a5a6508535ed1af86919c79d75571f1a65ef (diff)
downloadayatana-indicator-sound-66d95fc3a6a73357578051739dd58b5622ceffd6.tar.gz
ayatana-indicator-sound-66d95fc3a6a73357578051739dd58b5622ceffd6.tar.bz2
ayatana-indicator-sound-66d95fc3a6a73357578051739dd58b5622ceffd6.zip
* New upstream release.
- Inconsistency between messaging menu and sound menu pips (LP: #933593) - indicator-sound-service crashed with SIGSEGV in fast_validate() (LP: #949837) - free-memory-read crash in indicator-sound-service's file monitoring (LP: #965848) - minor memory leaks in blacklist handling (LP: #960578) - FIX (LP: FIX)
Diffstat (limited to 'src/music-player-bridge.vala')
-rw-r--r--src/music-player-bridge.vala26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/music-player-bridge.vala b/src/music-player-bridge.vala
index c2d6623..18f1c40 100644
--- a/src/music-player-bridge.vala
+++ b/src/music-player-bridge.vala
@@ -85,19 +85,20 @@ public class MusicPlayerBridge : GLib.Object
DesktopAppInfo desktop_info = info as DesktopAppInfo;
var file_path = desktop_info.get_filename ();
File f = File.new_for_path (file_path);
- FileMonitor monitor;
try {
- monitor = f.monitor (FileMonitorFlags.SEND_MOVED, null);
+ FileMonitor monitor = f.monitor (FileMonitorFlags.SEND_MOVED, null);
+ unowned FileMonitor weak_monitor = monitor;
+ monitor.changed.connect ((desktop_file, other_file, event_type) => {
+ this.relevant_desktop_file_changed (desktop_file, other_file, event_type, weak_monitor);
+ });
+ monitor.ref(); // will be unref()ed by relevant_desktop_file_changed()
+ GLib.debug ("monitoring file '%s'", file_path);
+ this.file_monitors.set (file_path, mpris_key);
}
catch (Error e){
warning ("Unable to create a file monitor for %s", info.get_name());
return;
}
- this.file_monitors.set (file_path, mpris_key);
- // Finally watch for a change.
- monitor.changed.connect ((desktop_file, other_file, event_type) => {
- this.relevant_desktop_file_changed (desktop_file, other_file, event_type, monitor);
- });
}
private void relevant_desktop_file_changed (File desktop_file,
@@ -117,10 +118,13 @@ public class MusicPlayerBridge : GLib.Object
warning ("relevant_desktop_file_changed is returning a file which we know nothing about - %s",
path);
return;
- }
- this.registered_clients[this.file_monitors[path]].remove_from_menu();
- this.settings_manager.remove_interested (this.file_monitors[path]);
- this.registered_clients.unset (this.file_monitors[path]);
+ }
+
+ var mpris_key = this.file_monitors[path];
+ GLib.debug ("file \"%s\" was removed; stopping monitoring \"%s\"", path, mpris_key);
+ this.registered_clients[mpris_key].remove_from_menu();
+ this.settings_manager.remove_interested (mpris_key);
+ this.registered_clients.unset (mpris_key);
monitor.cancel ();
monitor.unref();
}