summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/voicecall.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/voicecall.c b/src/voicecall.c
index bfe3fbcb..f0ffb399 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -41,7 +41,6 @@
#define VOICECALLS_FLAG_PENDING 0x1
#define VOICECALLS_FLAG_MULTI_RELEASE 0x2
-#define VOICECALLS_FLAG_UPDATING_CALL_LIST 0x4
#define VOICECALLS_FLAG_UPDATING_MPTY_CALL_LIST 0x8
#define MAX_VOICE_CALLS 16
@@ -53,6 +52,7 @@ struct voicecalls_data {
struct ofono_voicecall_ops *ops;
int flags;
DBusMessage *pending;
+ gint emit_calls_source;
};
struct voicecall {
@@ -485,6 +485,11 @@ static void voicecalls_destroy(gpointer userdata)
struct voicecalls_data *calls = modem->voicecalls;
GSList *l;
+ if (calls->emit_calls_source) {
+ g_source_remove(calls->emit_calls_source);
+ calls->emit_calls_source = 0;
+ }
+
for (l = calls->call_list; l; l = l->next)
voicecall_dbus_unregister(modem, l->data);
@@ -1143,8 +1148,7 @@ static gboolean real_emit_call_list_changed(void *data)
g_strfreev(objpath_list);
- ofono_debug("Resetting updating flag");
- voicecalls->flags &= ~VOICECALLS_FLAG_UPDATING_CALL_LIST;
+ voicecalls->emit_calls_source = 0;
return FALSE;
}
@@ -1154,10 +1158,9 @@ static void emit_call_list_changed(struct ofono_modem *modem)
#ifdef DELAY_EMIT
struct voicecalls_data *calls = modem->voicecalls;
- if (!(calls->flags & VOICECALLS_FLAG_UPDATING_CALL_LIST)) {
- calls->flags |= VOICECALLS_FLAG_UPDATING_CALL_LIST;
- g_timeout_add(0, real_emit_call_list_changed, modem);
- }
+ if (calls->emit_calls_source == 0)
+ calls->emit_calls_source =
+ g_timeout_add(0, real_emit_call_list_changed, modem);
#else
real_emit_call_list_changed(modem);
#endif