mirror of git://git.sysmocom.de/ofono
hfpmodem: Avoid segfault in network-registration
The use of g_idle_add can cause a segmentation fault if the object is destroyed in the meantime.
This commit is contained in:
parent
8779b46258
commit
c1ed32db9d
|
@ -51,6 +51,7 @@ struct netreg_data {
|
||||||
GAtChat *chat;
|
GAtChat *chat;
|
||||||
unsigned char cind_pos[HFP_INDICATOR_LAST];
|
unsigned char cind_pos[HFP_INDICATOR_LAST];
|
||||||
int cind_val[HFP_INDICATOR_LAST];
|
int cind_val[HFP_INDICATOR_LAST];
|
||||||
|
guint register_source;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void cops_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
static void cops_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||||
|
@ -297,6 +298,9 @@ static void hfp_signal_strength(struct ofono_netreg *netreg,
|
||||||
static gboolean hfp_netreg_register(gpointer user_data)
|
static gboolean hfp_netreg_register(gpointer user_data)
|
||||||
{
|
{
|
||||||
struct ofono_netreg *netreg = user_data;
|
struct ofono_netreg *netreg = user_data;
|
||||||
|
struct netreg_data *nd = ofono_netreg_get_data(netreg);
|
||||||
|
|
||||||
|
nd->register_source = 0;
|
||||||
|
|
||||||
ofono_netreg_register(netreg);
|
ofono_netreg_register(netreg);
|
||||||
|
|
||||||
|
@ -320,7 +324,7 @@ static int hfp_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor,
|
||||||
g_at_chat_register(nd->chat, "+CIEV:", ciev_notify, FALSE,
|
g_at_chat_register(nd->chat, "+CIEV:", ciev_notify, FALSE,
|
||||||
netreg, NULL);
|
netreg, NULL);
|
||||||
|
|
||||||
g_idle_add(hfp_netreg_register, netreg);
|
nd->register_source = g_idle_add(hfp_netreg_register, netreg);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -329,6 +333,9 @@ static void hfp_netreg_remove(struct ofono_netreg *netreg)
|
||||||
{
|
{
|
||||||
struct netreg_data *nd = ofono_netreg_get_data(netreg);
|
struct netreg_data *nd = ofono_netreg_get_data(netreg);
|
||||||
|
|
||||||
|
if (nd->register_source != 0)
|
||||||
|
g_source_remove(nd->register_source);
|
||||||
|
|
||||||
ofono_netreg_set_data(netreg, NULL);
|
ofono_netreg_set_data(netreg, NULL);
|
||||||
|
|
||||||
g_at_chat_unref(nd->chat);
|
g_at_chat_unref(nd->chat);
|
||||||
|
|
Loading…
Reference in New Issue