From 8ec8d6d2abc55ddc140fc5d390ba2034b1fa6588 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 28 Feb 2011 12:45:19 +0000 Subject: caught a edge case bug which was causing those weird crashes --- src/pulseaudio-mgr.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'src/pulseaudio-mgr.c') diff --git a/src/pulseaudio-mgr.c b/src/pulseaudio-mgr.c index 76102e4..a0199ea 100644 --- a/src/pulseaudio-mgr.c +++ b/src/pulseaudio-mgr.c @@ -220,11 +220,12 @@ pm_subscribed_events_callback (pa_context *c, } break; case PA_SUBSCRIPTION_EVENT_SOURCE: - g_debug ("Looks like source event of some description"); + g_debug ("Looks like source event of some description - index = %i", index); // We don't care about any other sink other than the active one. if (index != active_sink_get_source_index (sink)) return; if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + g_debug ("Source removal event - index = %i", index); active_sink_deactivate_voip_source (sink, FALSE); } else{ @@ -396,8 +397,8 @@ pm_sink_info_callback (pa_context *c, return; } else { - if (IS_ACTIVE_SINK (userdata) == FALSE){ - g_warning ("sink info callback - our user data is not what we think it should be"); + if (IS_ACTIVE_SINK (userdata) == FALSE || sink == NULL){ + g_warning ("sink info callback - our user data is not what we think it should be or the sink parameter is null"); return; } ActiveSink* a_sink = ACTIVE_SINK (userdata); @@ -418,8 +419,8 @@ pm_default_sink_info_callback (pa_context *c, return; } else { - if (IS_ACTIVE_SINK (userdata) == FALSE){ - g_warning ("Default sink info callback - our user data is not what we think it should be"); + if (IS_ACTIVE_SINK (userdata) == FALSE || info == NULL){ + g_warning ("Default sink info callback - our user data is not what we think it should be or the info parameter is null"); return; } // Only repopulate if there is a change with regards the index @@ -441,9 +442,8 @@ pm_sink_input_info_callback (pa_context *c, return; } else { - if (info == NULL) { - // TODO: watch this carefully - PA async api should not be doing this . . . - g_warning("\n Sink input info callback : SINK INPUT INFO IS NULL BUT EOL was not POSITIVE!!!"); + if (info == NULL || IS_ACTIVE_SINK (userdata) == FALSE) { + g_warning("Sink input info callback : SINK INPUT INFO IS NULL or our user_data is not what we think it should be"); return; } @@ -486,8 +486,8 @@ pm_update_active_sink (pa_context *c, return; } else{ - if (IS_ACTIVE_SINK (userdata) == FALSE){ - g_warning ("update_active_sink - our user data is not what we think it should be"); + if (IS_ACTIVE_SINK (userdata) == FALSE || info == NULL){ + g_warning ("update_active_sink - our user data is not what we think it should be or the info parameter is null"); return; } active_sink_update (ACTIVE_SINK(userdata), info); @@ -504,6 +504,11 @@ pm_toggle_mute_for_every_sink_callback (pa_context *c, return; } else { + if (IS_ACTIVE_SINK (userdata) == FALSE || sink == NULL){ + g_warning ("toggle_mute cb - our user data is not what we think it should be or the sink parameter is null"); + return; + } + pa_operation_unref (pa_context_set_sink_mute_by_index (c, sink->index, GPOINTER_TO_INT(userdata), @@ -523,8 +528,8 @@ pm_default_source_info_callback (pa_context *c, return; } else { - if (IS_ACTIVE_SINK (userdata) == FALSE){ - g_warning ("Default sink info callback - our user data is not what we think it should be"); + if (IS_ACTIVE_SINK (userdata) == FALSE || info == NULL){ + g_warning ("Default source info callback - our user data is not what we think it should be or the source info parameter is null"); return; } // If there is an index change we need to change our cached source @@ -546,8 +551,8 @@ pm_source_info_callback (pa_context *c, return; } else { - if (IS_ACTIVE_SINK (userdata) == FALSE){ - g_warning ("Default sink info callback - our user data is not what we think it should be"); + if (IS_ACTIVE_SINK (userdata) == FALSE || info == NULL){ + g_warning ("source info callback - our user data is not what we think it should be or the source info parameter is null"); return; } // For now we will take the first available @@ -567,8 +572,8 @@ pm_update_source_info_callback (pa_context *c, return; } else { - if (IS_ACTIVE_SINK (userdata) == FALSE){ - g_warning ("Default sink info callback - our user data is not what we think it should be"); + if (IS_ACTIVE_SINK (userdata) == FALSE || info == NULL ){ + g_warning ("source info update callback - our user data is not what we think it should be or the source info paramter is null"); return; } g_debug ("Got a source update for %s , index %i", info->name, info->index); -- cgit v1.2.3 From 031015221d4551339e14b31838d364386952a63b Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 1 Mar 2011 18:51:37 +0000 Subject: fix for reconnect bug while autospawn is true --- src/pulseaudio-mgr.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'src/pulseaudio-mgr.c') diff --git a/src/pulseaudio-mgr.c b/src/pulseaudio-mgr.c index a0199ea..17545a4 100644 --- a/src/pulseaudio-mgr.c +++ b/src/pulseaudio-mgr.c @@ -31,6 +31,7 @@ with this program. If not, see . #include #include "pulseaudio-mgr.h" +#include "config.h" #define RECONNECT_DELAY 5 @@ -116,24 +117,44 @@ Method which connects to the pulse server and is used to track reconnects. static gboolean reconnect_to_pulse (gpointer user_data) { - g_debug("Attempt to reconnect to pulse"); + g_debug("Attempt a pulse connection"); // reset + g_return_val_if_fail (IS_ACTIVE_SINK (user_data), FALSE); + connection_attempts += 1; if (pulse_context != NULL) { pa_context_unref(pulse_context); pulse_context = NULL; } - pulse_context = pa_context_new( pa_glib_mainloop_get_api( pa_main_loop ), - "com.canonical.indicators.sound" ); + pa_proplist *proplist; + + proplist = pa_proplist_new (); + pa_proplist_sets (proplist, + PA_PROP_APPLICATION_NAME, + "Indicator Sound"); + pa_proplist_sets (proplist, + PA_PROP_APPLICATION_ID, + "com.canonical.indicators.sound"); + pa_proplist_sets (proplist, + PA_PROP_APPLICATION_ICON_NAME, + "multimedia-volume-control"); + pa_proplist_sets (proplist, + PA_PROP_APPLICATION_VERSION, + PACKAGE_VERSION); + + pulse_context = pa_context_new_with_proplist (pa_glib_mainloop_get_api( pa_main_loop ), + NULL, + proplist); + pa_proplist_free (proplist); g_assert(pulse_context); pa_context_set_state_callback (pulse_context, pm_context_state_callback, user_data); int result = pa_context_connect (pulse_context, NULL, - PA_CONTEXT_NOFAIL, - user_data); + (pa_context_flags_t)PA_CONTEXT_NOFAIL, + NULL); if (result < 0) { g_warning ("Failed to connect context: %s", @@ -280,8 +301,10 @@ pm_context_state_callback (pa_context *c, void *userdata) g_debug("connecting - waiting for the server to become available"); break; case PA_CONTEXT_AUTHORIZING: + g_debug ("Authorizing"); break; case PA_CONTEXT_SETTING_NAME: + g_debug ("Setting name"); break; case PA_CONTEXT_FAILED: g_warning("PA_CONTEXT_FAILED - Is PulseAudio Daemon running ?"); @@ -289,10 +312,11 @@ pm_context_state_callback (pa_context *c, void *userdata) if (reconnect_idle_id == 0){ reconnect_idle_id = g_timeout_add_seconds (RECONNECT_DELAY, reconnect_to_pulse, - userdata); + (gpointer)userdata); } break; case PA_CONTEXT_TERMINATED: + g_debug ("Terminated"); break; case PA_CONTEXT_READY: connection_attempts = 0; @@ -579,4 +603,4 @@ pm_update_source_info_callback (pa_context *c, g_debug ("Got a source update for %s , index %i", info->name, info->index); active_sink_update_voip_input_source (ACTIVE_SINK (userdata), info); } -} \ No newline at end of file +} -- cgit v1.2.3 From c373cdd1c65b5ec43e93317600508a5b0d9e7a44 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 1 Mar 2011 20:36:26 +0000 Subject: fixed a bug introduced in the last merge earlier this week --- src/pulseaudio-mgr.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/pulseaudio-mgr.c') diff --git a/src/pulseaudio-mgr.c b/src/pulseaudio-mgr.c index 17545a4..6d11221 100644 --- a/src/pulseaudio-mgr.c +++ b/src/pulseaudio-mgr.c @@ -528,11 +528,10 @@ pm_toggle_mute_for_every_sink_callback (pa_context *c, return; } else { - if (IS_ACTIVE_SINK (userdata) == FALSE || sink == NULL){ - g_warning ("toggle_mute cb - our user data is not what we think it should be or the sink parameter is null"); + if (sink == NULL) { + g_warning ("toggle_mute cb - sink parameter is null - why ?"); return; } - pa_operation_unref (pa_context_set_sink_mute_by_index (c, sink->index, GPOINTER_TO_INT(userdata), -- cgit v1.2.3