bearer-qmi: cleanup indication handlers on network-initiated disconnects
Otherwise, they'll end up queueing up and each time we get a new indication the signal will get called multiple times: [/dev/cdc-wdm0] received message... <<<<<< RAW: <<<<<< length = 20 <<<<<< data = 01:13:00:80:01:09:04:00:00:01:00:07:00:20:04:00:05:00:00:00 [/dev/cdc-wdm0] received generic indication (translated)... <<<<<< QMUX: <<<<<< length = 19 <<<<<< flags = 0x80 <<<<<< service = "wds" <<<<<< client = 9 <<<<<< QMI: <<<<<< flags = "indication" <<<<<< transaction = 0 <<<<<< tlv_length = 7 <<<<<< message = "Event Report" (0x0001) <<<<<< TLV: <<<<<< type = "Preferred Data System" (0x20) <<<<<< length = 4 <<<<<< value = 05:00:00:00 <<<<<< translated = lte <debug> [1504578559.592891] Got QMI WDS event report <debug> [1504578559.598212] Got QMI WDS event report <debug> [1504578559.601694] Got QMI WDS event report
This commit is contained in:
@@ -1584,11 +1584,33 @@ reset_bearer_connection (MMBearerQmi *self,
|
|||||||
gboolean reset_ipv6)
|
gboolean reset_ipv6)
|
||||||
{
|
{
|
||||||
if (reset_ipv4) {
|
if (reset_ipv4) {
|
||||||
|
if (self->priv->client_ipv4) {
|
||||||
|
if (self->priv->packet_service_status_ipv4_indication_id)
|
||||||
|
common_setup_cleanup_packet_service_status_unsolicited_events (self,
|
||||||
|
self->priv->client_ipv4,
|
||||||
|
FALSE,
|
||||||
|
&self->priv->packet_service_status_ipv4_indication_id);
|
||||||
|
if (self->priv->event_report_ipv4_indication_id)
|
||||||
|
cleanup_event_report_unsolicited_events (self,
|
||||||
|
self->priv->client_ipv4,
|
||||||
|
&self->priv->event_report_ipv4_indication_id);
|
||||||
|
}
|
||||||
self->priv->packet_data_handle_ipv4 = 0;
|
self->priv->packet_data_handle_ipv4 = 0;
|
||||||
g_clear_object (&self->priv->client_ipv4);
|
g_clear_object (&self->priv->client_ipv4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reset_ipv6) {
|
if (reset_ipv6) {
|
||||||
|
if (self->priv->client_ipv6) {
|
||||||
|
if (self->priv->packet_service_status_ipv6_indication_id)
|
||||||
|
common_setup_cleanup_packet_service_status_unsolicited_events (self,
|
||||||
|
self->priv->client_ipv6,
|
||||||
|
FALSE,
|
||||||
|
&self->priv->packet_service_status_ipv6_indication_id);
|
||||||
|
if (self->priv->event_report_ipv6_indication_id)
|
||||||
|
cleanup_event_report_unsolicited_events (self,
|
||||||
|
self->priv->client_ipv6,
|
||||||
|
&self->priv->event_report_ipv6_indication_id);
|
||||||
|
}
|
||||||
self->priv->packet_data_handle_ipv6 = 0;
|
self->priv->packet_data_handle_ipv6 = 0;
|
||||||
g_clear_object (&self->priv->client_ipv6);
|
g_clear_object (&self->priv->client_ipv6);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user