aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-08-27 15:49:19 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-27 15:49:19 +0200
commitbc980cb5fe3009b379f50ed7bbfa40c1016f2a6c (patch)
treecb2d654ed8dcf707464d1238c58a4e257ed23b5b
parentb2d11ea2cec7c6d3330f6d3a9e86b87c55a786c2 (diff)
bearer-qmi: only keep internal state if IP type specific connection succeeds
-rw-r--r--src/mm-bearer-qmi.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index 669c3224..961b9158 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -533,14 +533,20 @@ connect_context_step (ConnectContext *ctx)
/* Keep connection related data */
g_assert (ctx->self->priv->data == NULL);
ctx->self->priv->data = g_object_ref (ctx->data);
- g_assert (ctx->self->priv->client_ipv4 == NULL);
- ctx->self->priv->client_ipv4 = g_object_ref (ctx->client_ipv4);
+
g_assert (ctx->self->priv->packet_data_handle_ipv4 == 0);
- ctx->self->priv->packet_data_handle_ipv4 = ctx->packet_data_handle_ipv4;
- g_assert (ctx->self->priv->client_ipv6 == NULL);
- ctx->self->priv->client_ipv6 = g_object_ref (ctx->client_ipv6);
+ g_assert (ctx->self->priv->client_ipv4 == NULL);
+ if (ctx->packet_data_handle_ipv4) {
+ ctx->self->priv->packet_data_handle_ipv4 = ctx->packet_data_handle_ipv4;
+ ctx->self->priv->client_ipv4 = g_object_ref (ctx->client_ipv4);
+ }
+
g_assert (ctx->self->priv->packet_data_handle_ipv6 == 0);
- ctx->self->priv->packet_data_handle_ipv6 = ctx->packet_data_handle_ipv6;
+ g_assert (ctx->self->priv->client_ipv6 == NULL);
+ if (ctx->packet_data_handle_ipv6) {
+ ctx->self->priv->packet_data_handle_ipv6 = ctx->packet_data_handle_ipv6;
+ ctx->self->priv->client_ipv6 = g_object_ref (ctx->client_ipv6);
+ }
/* Build IP config; always DHCP based */
config = mm_bearer_ip_config_new ();