aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-modem-at.c6
-rw-r--r--src/mm-base-modem.c57
-rw-r--r--src/mm-base-modem.h20
-rw-r--r--src/mm-broadband-bearer.c73
-rw-r--r--src/mm-broadband-modem.c177
-rw-r--r--src/mm-iface-modem-3gpp-ussd.c6
-rw-r--r--src/mm-iface-modem-3gpp.c6
-rw-r--r--src/mm-iface-modem-cdma.c6
-rw-r--r--src/mm-iface-modem-location.c6
-rw-r--r--src/mm-iface-modem-messaging.c6
-rw-r--r--src/mm-iface-modem-time.c6
-rw-r--r--src/mm-iface-modem.c29
-rw-r--r--src/mm-sim.c17
13 files changed, 250 insertions, 165 deletions
diff --git a/src/mm-base-modem-at.c b/src/mm-base-modem-at.c
index 820063b8..70b4e41f 100644
--- a/src/mm-base-modem-at.c
+++ b/src/mm-base-modem-at.c
@@ -277,7 +277,7 @@ mm_base_modem_at_sequence (MMBaseModem *self,
GError *error = NULL;
/* No port given, so we'll try to guess which is best */
- port = mm_base_modem_get_best_at_port (self, &error);
+ port = mm_base_modem_peek_best_at_port (self, &error);
if (!port) {
g_assert (error != NULL);
g_simple_async_report_take_gerror_in_idle (G_OBJECT (self),
@@ -487,7 +487,7 @@ mm_base_modem_at_command (MMBaseModem *self,
GError *error = NULL;
/* No port given, so we'll try to guess which is best */
- port = mm_base_modem_get_best_at_port (self, &error);
+ port = mm_base_modem_peek_best_at_port (self, &error);
if (!port) {
g_assert (error != NULL);
g_simple_async_report_take_gerror_in_idle (G_OBJECT (self),
@@ -536,7 +536,7 @@ mm_base_modem_at_command_ignore_reply (MMBaseModem *self,
MMAtSerialPort *port;
/* No port given, so we'll try to guess which is best */
- port = mm_base_modem_get_best_at_port (self, NULL);
+ port = mm_base_modem_peek_best_at_port (self, NULL);
if (!port)
/* No valid port, and we ignore replies, so just exit. */
return;
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 668199b9..74deb0ac 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -325,6 +325,14 @@ mm_base_modem_get_port_primary (MMBaseModem *self)
{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+ return (self->priv->primary ? g_object_ref (self->priv->primary) : NULL);
+}
+
+MMAtSerialPort *
+mm_base_modem_peek_port_primary (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
return self->priv->primary;
}
@@ -333,6 +341,14 @@ mm_base_modem_get_port_secondary (MMBaseModem *self)
{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+ return (self->priv->secondary ? g_object_ref (self->priv->secondary) : NULL);
+}
+
+MMAtSerialPort *
+mm_base_modem_peek_port_secondary (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
return self->priv->secondary;
}
@@ -341,12 +357,29 @@ mm_base_modem_get_port_qcdm (MMBaseModem *self)
{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+ return (self->priv->qcdm ? g_object_ref (self->priv->qcdm) : NULL);
+}
+
+MMQcdmSerialPort *
+mm_base_modem_peek_port_qcdm (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
return self->priv->qcdm;
}
MMPort *
mm_base_modem_get_best_data_port (MMBaseModem *self)
{
+ MMPort *port;
+
+ port = mm_base_modem_peek_best_data_port (self);
+ return (port ? g_object_ref (port) : NULL);
+}
+
+MMPort *
+mm_base_modem_peek_best_data_port (MMBaseModem *self)
+{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
/* TODO: sometime we'll have a list of available data ports to use instead
@@ -361,24 +394,32 @@ MMAtSerialPort *
mm_base_modem_get_best_at_port (MMBaseModem *self,
GError **error)
{
- MMAtSerialPort *port;
+ MMAtSerialPort *best;
+ best = mm_base_modem_peek_best_at_port (self, error);
+ return (best ? g_object_ref (best) : NULL);
+}
+
+MMAtSerialPort *
+mm_base_modem_peek_best_at_port (MMBaseModem *self,
+ GError **error)
+{
/* Decide which port to use */
- port = mm_base_modem_get_port_primary (self);
- if (port && !mm_port_get_connected (MM_PORT (port)))
- return port;
+ if (self->priv->primary &&
+ !mm_port_get_connected (MM_PORT (self->priv->primary)))
+ return self->priv->primary;
/* If primary port is connected, check if we can get the secondary
* port */
- port = mm_base_modem_get_port_secondary (self);
- if (port && !mm_port_get_connected (MM_PORT (port)))
- return port;
+ if (self->priv->secondary &&
+ !mm_port_get_connected (MM_PORT (self->priv->secondary)))
+ return self->priv->secondary;
/* Otherwise, we cannot get any port */
g_set_error (error,
MM_CORE_ERROR,
MM_CORE_ERROR_CONNECTED,
- "No port available to run command");
+ "No AT port available to run command");
return NULL;
}
diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h
index b572cf87..4318de3a 100644
--- a/src/mm-base-modem.h
+++ b/src/mm-base-modem.h
@@ -114,12 +114,20 @@ gboolean mm_base_modem_owns_port (MMBaseModem *self,
gboolean mm_base_modem_organize_ports (MMBaseModem *self,
GError **error);
-MMAtSerialPort *mm_base_modem_get_port_primary (MMBaseModem *self);
-MMAtSerialPort *mm_base_modem_get_port_secondary (MMBaseModem *self);
-MMQcdmSerialPort *mm_base_modem_get_port_qcdm (MMBaseModem *self);
-MMPort *mm_base_modem_get_best_data_port (MMBaseModem *self);
-MMAtSerialPort *mm_base_modem_get_best_at_port (MMBaseModem *self,
- GError **error);
+MMAtSerialPort *mm_base_modem_peek_port_primary (MMBaseModem *self);
+MMAtSerialPort *mm_base_modem_peek_port_secondary (MMBaseModem *self);
+MMQcdmSerialPort *mm_base_modem_peek_port_qcdm (MMBaseModem *self);
+MMAtSerialPort *mm_base_modem_peek_best_at_port (MMBaseModem *self,
+ GError **error);
+MMPort *mm_base_modem_peek_best_data_port (MMBaseModem *self);
+
+MMAtSerialPort *mm_base_modem_get_port_primary (MMBaseModem *self);
+MMAtSerialPort *mm_base_modem_get_port_secondary (MMBaseModem *self);
+MMQcdmSerialPort *mm_base_modem_get_port_qcdm (MMBaseModem *self);
+MMAtSerialPort *mm_base_modem_get_best_at_port (MMBaseModem *self,
+ GError **error);
+MMPort *mm_base_modem_get_best_data_port (MMBaseModem *self);
+
void mm_base_modem_set_valid (MMBaseModem *self,
gboolean valid);
diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
index 6201c041..64eec160 100644
--- a/src/mm-broadband-bearer.c
+++ b/src/mm-broadband-bearer.c
@@ -412,6 +412,8 @@ connect_cdma (MMBroadbandBearer *self,
{
DetailedConnectContext *ctx;
+ g_assert (primary != NULL);
+
ctx = detailed_connect_context_new (self,
modem,
primary,
@@ -591,6 +593,8 @@ dial_3gpp (MMBroadbandBearer *self,
gchar *command;
Dial3gppContext *ctx;
+ g_assert (primary != NULL);
+
ctx = dial_3gpp_context_new (self,
modem,
primary,
@@ -899,6 +903,8 @@ connect_3gpp (MMBroadbandBearer *self,
{
DetailedConnectContext *ctx;
+ g_assert (primary != NULL);
+
ctx = detailed_connect_context_new (self,
modem,
primary,
@@ -1084,8 +1090,21 @@ connect (MMBearer *self,
NULL);
g_assert (modem != NULL);
- /* We will launch the ATD call in the primary port */
- primary = mm_base_modem_get_port_primary (modem);
+ /* We will launch the ATD call in the primary port... */
+ primary = mm_base_modem_peek_port_primary (modem);
+ if (!primary) {
+ g_simple_async_report_error_in_idle (
+ G_OBJECT (self),
+ callback,
+ user_data,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_CONNECTED,
+ "Couldn't connect: couldn't get primary port");
+ g_object_unref (modem);
+ return;
+ }
+
+ /* ...only if not already connected */
if (mm_port_get_connected (MM_PORT (primary))) {
g_simple_async_report_error_in_idle (
G_OBJECT (self),
@@ -1099,7 +1118,7 @@ connect (MMBearer *self,
}
/* Look for best data port, NULL if none available. */
- data = mm_base_modem_get_best_data_port (modem);
+ data = mm_base_modem_peek_best_data_port (modem);
if (!data) {
g_simple_async_report_error_in_idle (
G_OBJECT (self),
@@ -1149,7 +1168,7 @@ connect (MMBearer *self,
MM_BROADBAND_BEARER (self),
MM_BROADBAND_MODEM (modem),
primary,
- mm_base_modem_get_port_secondary (modem),
+ mm_base_modem_peek_port_secondary (modem),
data,
cancellable,
(GAsyncReadyCallback) connect_3gpp_ready,
@@ -1170,7 +1189,7 @@ connect (MMBearer *self,
MM_BROADBAND_BEARER (self),
MM_BROADBAND_MODEM (modem),
primary,
- mm_base_modem_get_port_secondary (modem),
+ mm_base_modem_peek_port_secondary (modem),
data,
cancellable,
(GAsyncReadyCallback) connect_cdma_ready,
@@ -1294,6 +1313,8 @@ disconnect_cdma (MMBroadbandBearer *self,
{
DetailedDisconnectContext *ctx;
+ g_assert (primary != NULL);
+
ctx = detailed_disconnect_context_new (self,
modem,
primary,
@@ -1419,6 +1440,8 @@ disconnect_3gpp (MMBroadbandBearer *self,
{
DetailedDisconnectContext *ctx;
+ g_assert (primary != NULL);
+
ctx = detailed_disconnect_context_new (self,
modem,
primary,
@@ -1552,6 +1575,7 @@ disconnect (MMBearer *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
+ MMAtSerialPort *primary;
MMBaseModem *modem = NULL;
DisconnectContext *ctx;
@@ -1571,6 +1595,20 @@ disconnect (MMBearer *self,
NULL);
g_assert (modem != NULL);
+ /* We need the primary port to disconnect... */
+ primary = mm_base_modem_peek_port_primary (modem);
+ if (!primary) {
+ g_simple_async_report_error_in_idle (
+ G_OBJECT (self),
+ callback,
+ user_data,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Couldn't disconnect: couldn't get primary port");
+ g_object_unref (modem);
+ return;
+ }
+
/* In this context, we only keep the stuff we'll need later */
ctx = g_new0 (DisconnectContext, 1);
ctx->self = g_object_ref (self);
@@ -1585,8 +1623,8 @@ disconnect (MMBearer *self,
MM_BROADBAND_BEARER_GET_CLASS (self)->disconnect_3gpp (
MM_BROADBAND_BEARER (self),
MM_BROADBAND_MODEM (modem),
- mm_base_modem_get_port_primary (modem),
- mm_base_modem_get_port_secondary (modem),
+ primary,
+ mm_base_modem_peek_port_secondary (modem),
MM_BROADBAND_BEARER (self)->priv->port,
(GAsyncReadyCallback) disconnect_3gpp_ready,
ctx);
@@ -1596,8 +1634,8 @@ disconnect (MMBearer *self,
MM_BROADBAND_BEARER_GET_CLASS (self)->disconnect_cdma (
MM_BROADBAND_BEARER (self),
MM_BROADBAND_MODEM (modem),
- mm_base_modem_get_port_primary (modem),
- mm_base_modem_get_port_secondary (modem),
+ primary,
+ mm_base_modem_peek_port_secondary (modem),
MM_BROADBAND_BEARER (self)->priv->port,
(GAsyncReadyCallback) disconnect_cdma_ready,
ctx);
@@ -1655,8 +1693,11 @@ static void
init_async_context_free (InitAsyncContext *ctx,
gboolean close_port)
{
- if (close_port)
- mm_serial_port_close (MM_SERIAL_PORT (ctx->port));
+ if (ctx->port) {
+ if (close_port)
+ mm_serial_port_close (MM_SERIAL_PORT (ctx->port));
+ g_object_unref (ctx->port);
+ }
g_object_unref (ctx->self);
g_object_unref (ctx->modem);
g_object_unref (ctx->result);
@@ -1919,6 +1960,16 @@ initable_init_async (GAsyncInitable *initable,
NULL);
ctx->port = mm_base_modem_get_port_primary (ctx->modem);
+ if (!ctx->port) {
+ g_simple_async_result_set_error (ctx->result,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Couldn't get primary port");
+ g_simple_async_result_complete_in_idle (ctx->result);
+ init_async_context_free (ctx, FALSE);
+ return;
+ }
+
if (!mm_serial_port_open (MM_SERIAL_PORT (ctx->port), &error)) {
g_simple_async_result_take_error (ctx->result, error);
g_simple_async_result_complete_in_idle (ctx->result);
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 1391e437..60742d16 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -1246,7 +1246,6 @@ modem_load_signal_quality (MMIfaceModem *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- MMSerialPort *port;
SignalQualityContext *ctx;
GError *error = NULL;
@@ -1259,9 +1258,8 @@ modem_load_signal_quality (MMIfaceModem *self,
modem_load_signal_quality);
/* Check whether we can get a non-connected AT port */
- port = (MMSerialPort *)mm_base_modem_get_best_at_port (MM_BASE_MODEM (self), &error);
- if (port) {
- ctx->port = g_object_ref (port);
+ ctx->port = (MMSerialPort *)mm_base_modem_get_best_at_port (MM_BASE_MODEM (self), &error);
+ if (ctx->port) {
if (MM_BROADBAND_MODEM (self)->priv->modem_cind_supported)
signal_quality_cind (ctx);
else
@@ -1270,10 +1268,9 @@ modem_load_signal_quality (MMIfaceModem *self,
}
/* If no best AT port available (all connected), try with QCDM ports */
- port = (MMSerialPort *)mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
- if (port) {
+ ctx->port = (MMSerialPort *)mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
+ if (ctx->port) {
g_error_free (error);
- ctx->port = g_object_ref (port);
signal_quality_qcdm (ctx);
return;
}
@@ -1446,13 +1443,17 @@ set_unsolicited_events_handlers (MMIfaceModem3gpp *self,
set_unsolicited_events_handlers);
ciev_regex = mm_3gpp_ciev_regex_get ();
- ports[0] = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
- ports[1] = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
/* Enable unsolicited events in given port */
- for (i = 0; ports[i] && i < 2; i++) {
+ for (i = 0; i < 2; i++) {
+ if (!ports[i])
+ continue;
+
/* Set/unset unsolicited CIEV event handler */
- mm_dbg ("%s unsolicited events handlers",
+ mm_dbg ("(%s) %s 3GPP unsolicited events handlers",
+ mm_port_get_device (MM_PORT (ports[i])),
enable ? "Setting" : "Removing");
mm_at_serial_port_add_unsolicited_msg_handler (
ports[i],
@@ -1546,10 +1547,10 @@ run_unsolicited_events_setup (UnsolicitedEventsContext *ctx)
if (!ctx->cmer_primary_done) {
ctx->cmer_primary_done = TRUE;
- port = mm_base_modem_get_port_primary (MM_BASE_MODEM (ctx->self));
+ port = mm_base_modem_peek_port_primary (MM_BASE_MODEM (ctx->self));
} else if (!ctx->cmer_secondary_done) {
ctx->cmer_secondary_done = TRUE;
- port = mm_base_modem_get_port_secondary (MM_BASE_MODEM (ctx->self));
+ port = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (ctx->self));
}
/* Enable unsolicited events in given port */
@@ -2295,31 +2296,31 @@ modem_3gpp_setup_unsolicited_registration (MMIfaceModem3gpp *self,
MMAtSerialPort *ports[2];
GPtrArray *array;
guint i;
-
- mm_dbg ("setting up unsolicited registration messages handling");
+ guint j;
result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
modem_3gpp_setup_unsolicited_registration);
- ports[0] = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
- ports[1] = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
/* Set up CREG unsolicited message handlers in both ports */
array = mm_3gpp_creg_regex_get (FALSE);
for (i = 0; i < 2; i++) {
- if (ports[i]) {
- guint j;
-
- for (j = 0; j < array->len; j++) {
- mm_at_serial_port_add_unsolicited_msg_handler (
- MM_AT_SERIAL_PORT (ports[i]),
- (GRegex *) g_ptr_array_index (array, j),
- (MMAtSerialUnsolicitedMsgFn)registration_state_changed,
- self,
- NULL);
- }
+ if (!ports[i])
+ continue;
+
+ mm_dbg ("(%s) setting up 3GPP unsolicited registration messages handlers",
+ mm_port_get_device (MM_PORT (ports[i])));
+ for (j = 0; j < array->len; j++) {
+ mm_at_serial_port_add_unsolicited_msg_handler (
+ MM_AT_SERIAL_PORT (ports[i]),
+ (GRegex *) g_ptr_array_index (array, j),
+ (MMAtSerialUnsolicitedMsgFn)registration_state_changed,
+ self,
+ NULL);
}
}
mm_3gpp_creg_regex_destroy (array);
@@ -2349,30 +2350,32 @@ modem_3gpp_cleanup_unsolicited_registration (MMIfaceModem3gpp *self,
MMAtSerialPort *ports[2];
GPtrArray *array;
guint i;
+ guint j;
- mm_dbg ("cleaning up unsolicited registration messages handling");
result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
modem_3gpp_cleanup_unsolicited_registration);
- ports[0] = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
- ports[1] = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
/* Set up CREG unsolicited message handlers in both ports */
array = mm_3gpp_creg_regex_get (FALSE);
for (i = 0; i < 2; i++) {
- if (ports[i]) {
- guint j;
-
- for (j = 0; j < array->len; j++) {
- mm_at_serial_port_add_unsolicited_msg_handler (
- MM_AT_SERIAL_PORT (ports[i]),
- (GRegex *) g_ptr_array_index (array, j),
- NULL,
- NULL,
- NULL);
- }
+ if (!ports[i])
+ continue;
+
+ mm_dbg ("(%s) cleaning up unsolicited registration messages handlers",
+ mm_port_get_device (MM_PORT (ports[i])));
+
+ for (j = 0; j < array->len; j++) {
+ mm_at_serial_port_add_unsolicited_msg_handler (
+ MM_AT_SERIAL_PORT (ports[i]),
+ (GRegex *) g_ptr_array_index (array, j),
+ NULL,
+ NULL,
+ NULL);
}
}
mm_3gpp_creg_regex_destroy (array);
@@ -2858,7 +2861,7 @@ cleanup_registration_sequence_ready (MMBroadbandModem *self,
if (!ctx->secondary_done) {
MMAtSerialPort *secondary;
- secondary = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ secondary = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
if (secondary) {
/* Now use the same registration setup in secondary port, if any */
ctx->secondary_done = TRUE;
@@ -2911,7 +2914,7 @@ modem_3gpp_cleanup_cs_registration (MMIfaceModem3gpp *self,
mm_base_modem_at_command_in_port (
MM_BASE_MODEM (self),
- mm_base_modem_get_port_primary (MM_BASE_MODEM (self)),
+ mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),
ctx->command,
10,
FALSE,
@@ -2936,7 +2939,7 @@ modem_3gpp_cleanup_ps_registration (MMIfaceModem3gpp *self,
mm_base_modem_at_command_in_port (
MM_BASE_MODEM (self),
- mm_base_modem_get_port_primary (MM_BASE_MODEM (self)),
+ mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),
ctx->command,
10,
FALSE,
@@ -3040,13 +3043,13 @@ setup_registration_sequence_ready (MMBroadbandModem *self,
return;
}
- secondary = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ secondary = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
if (secondary) {
/* Now use the same registration setup in secondary port, if any */
ctx->secondary_done = TRUE;
mm_base_modem_at_command_in_port (
MM_BASE_MODEM (self),
- mm_base_modem_get_port_primary (MM_BASE_MODEM (self)),
+ mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),
g_variant_get_string (command, NULL),
3,
FALSE,
@@ -3078,7 +3081,7 @@ modem_3gpp_setup_cs_registration (MMIfaceModem3gpp *self,
modem_3gpp_setup_cs_registration);
mm_base_modem_at_sequence_in_port (
MM_BASE_MODEM (self),
- mm_base_modem_get_port_primary (MM_BASE_MODEM (self)),
+ mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),
cs_registration_sequence,
NULL, /* response processor context */
NULL, /* response processor context free */
@@ -3101,7 +3104,7 @@ modem_3gpp_setup_ps_registration (MMIfaceModem3gpp *self,
modem_3gpp_setup_ps_registration);
mm_base_modem_at_sequence_in_port (
MM_BASE_MODEM (self),
- mm_base_modem_get_port_primary (MM_BASE_MODEM (self)),
+ mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)),
ps_registration_sequence,
NULL, /* response processor context */
NULL, /* response processor context free */
@@ -3501,13 +3504,16 @@ set_unsolicited_result_code_handlers (MMIfaceModem3gppUssd *self,
set_unsolicited_events_handlers);
cusd_regex = mm_3gpp_cusd_regex_get ();
- ports[0] = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
- ports[1] = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
/* Enable unsolicited result codes in given port */
- for (i = 0; ports[i] && i < 2; i++) {
+ for (i = 0; i < 2; i++) {
+ if (!ports[i])
+ continue;
/* Set/unset unsolicited CUSD event handler */
- mm_dbg ("%s unsolicited result code handlers",
+ mm_dbg ("(%s) %s unsolicited result code handlers",
+ mm_port_get_device (MM_PORT (ports[i])),
enable ? "Setting" : "Removing");
mm_at_serial_port_add_unsolicited_msg_handler (
ports[i],
@@ -4150,13 +4156,17 @@ set_messaging_unsolicited_events_handlers (MMIfaceModemMessaging *self,
set_messaging_unsolicited_events_handlers);
cmti_regex = mm_3gpp_cmti_regex_get ();
- ports[0] = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
- ports[1] = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
/* Enable unsolicited events in given port */
- for (i = 0; ports[i] && i < 2; i++) {
+ for (i = 0; i < 2; i++) {
+ if (!ports[i])
+ continue;
+
/* Set/unset unsolicited CMTI event handler */
- mm_dbg ("%s messaging unsolicited events handlers",
+ mm_dbg ("(%s) %s messaging unsolicited events handlers",
+ mm_port_get_device (MM_PORT (ports[i])),
enable ? "Setting" : "Removing");
mm_at_serial_port_add_unsolicited_msg_handler (
ports[i],
@@ -4679,7 +4689,7 @@ modem_cdma_get_hdr_state (MMIfaceModemCdma *self,
HdrStateContext *ctx;
GByteArray *hdrstate;
- qcdm = mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
+ qcdm = mm_base_modem_peek_port_qcdm (MM_BASE_MODEM (self));
if (!qcdm) {
g_simple_async_report_error_in_idle (G_OBJECT (self),
callback,
@@ -4803,7 +4813,7 @@ modem_cdma_get_call_manager_state (MMIfaceModemCdma *self,
CallManagerStateContext *ctx;
GByteArray *cmstate;
- qcdm = mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
+ qcdm = mm_base_modem_peek_port_qcdm (MM_BASE_MODEM (self));
if (!qcdm) {
g_simple_async_report_error_in_idle (G_OBJECT (self),
callback,
@@ -5093,8 +5103,6 @@ modem_cdma_get_cdma1x_serving_system (MMIfaceModemCdma *self,
if (ctx->qcdm) {
GByteArray *cdma_status;
- g_object_ref (ctx->qcdm);
-
/* Setup command */
cdma_status = g_byte_array_sized_new (25);
cdma_status->len = qcdm_cmd_cdma_status_new ((char *) cdma_status->data, 25);
@@ -5351,7 +5359,7 @@ modem_cdma_get_detailed_registration_state (MMIfaceModemCdma *self,
/* The default implementation to get detailed registration state
* requires the use of an AT port; so if we cannot get any, just
* return the error */
- port = mm_base_modem_get_best_at_port (MM_BASE_MODEM (self), &error);
+ port = mm_base_modem_peek_best_at_port (MM_BASE_MODEM (self), &error);
if (!port) {
g_simple_async_report_take_gerror_in_idle (G_OBJECT (self),
callback,
@@ -5534,7 +5542,7 @@ modem_cdma_setup_registration_checks (MMIfaceModemCdma *self,
modem_cdma_setup_registration_checks);
/* Check if we have a QCDM port */
- ctx->has_qcdm_port = !!mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
+ ctx->has_qcdm_port = !!mm_base_modem_peek_port_qcdm (MM_BASE_MODEM (self));
/* If we have cached results of Sprint command checking, use them */
if (ctx->self->priv->checked_sprint_support) {
@@ -5771,14 +5779,17 @@ setup_ports (MMBroadbandModem *self)
GPtrArray *array;
gint i, j;
- ports[0] = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
- ports[1] = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
+ ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self));
+ ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self));
/* Cleanup all unsolicited message handlers in all AT ports */
/* Set up CREG unsolicited message handlers, with NULL callbacks */
array = mm_3gpp_creg_regex_get (FALSE);
- for (i = 0; ports[i] && i < 2; i++) {
+ for (i = 0; i < 2; i++) {
+ if (!ports[i])
+ continue;
+
for (j = 0; j < array->len; j++) {
mm_at_serial_port_add_unsolicited_msg_handler (MM_AT_SERIAL_PORT (ports[i]),
(GRegex *)g_ptr_array_index (array, j),
@@ -5791,7 +5802,10 @@ setup_ports (MMBroadbandModem *self)
/* Set up CIEV unsolicited message handler, with NULL callback */
regex = mm_3gpp_ciev_regex_get ();
- for (i = 0; ports[i] && i < 2; i++) {
+ for (i = 0; i < 2; i++) {
+ if (!ports[i])
+ continue;
+
mm_at_serial_port_add_unsolicited_msg_handler (MM_AT_SERIAL_PORT (ports[i]),
regex,
NULL,
@@ -5802,7 +5816,10 @@ setup_ports (MMBroadbandModem *self)
/* Set up CMTI unsolicited message handler, with NULL callback */
regex = mm_3gpp_cmti_regex_get ();
- for (i = 0; ports[i] && i < 2; i++) {
+ for (i = 0; i < 2; i++) {
+ if (!ports[i])
+ continue;
+
mm_at_serial_port_add_unsolicited_msg_handler (MM_AT_SERIAL_PORT (ports[i]),
regex,
NULL,
@@ -5813,7 +5830,10 @@ setup_ports (MMBroadbandModem *self)
/* Set up CUSD unsolicited message handler, with NULL callback */
regex = mm_3gpp_cusd_regex_get ();
- for (i = 0; ports[i] && i < 2; i++) {
+ for (i = 0; i < 2; i++) {
+ if (!ports[i])
+ continue;
+
mm_at_serial_port_add_unsolicited_msg_handler (MM_AT_SERIAL_PORT (ports[i]),
regex,
NULL,
@@ -6396,9 +6416,11 @@ initialize_context_complete_and_free (InitializeContext *ctx)
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->result);
/* balance open/close count */
- if (ctx->close_port)
- mm_serial_port_close (MM_SERIAL_PORT (ctx->port));
- g_object_unref (ctx->port);
+ if (ctx->port) {
+ if (ctx->close_port)
+ mm_serial_port_close (MM_SERIAL_PORT (ctx->port));
+ g_object_unref (ctx->port);
+ }
g_object_unref (ctx->self);
g_free (ctx);
}
@@ -6473,11 +6495,20 @@ initialize_step (InitializeContext *ctx)
case INITIALIZE_STEP_PRIMARY_OPEN: {
GError *error = NULL;
+ ctx->port = mm_base_modem_get_port_primary (MM_BASE_MODEM (ctx->self));
+ if (!ctx->port) {
+ g_simple_async_result_set_error (ctx->result,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Cannot initialize: couldn't get primary port");
+ initialize_context_complete_and_free (ctx);
+ return;
+ }
+
/* Open and send first commands to the primary serial port.
* We do keep the primary port open during the whole initialization
* sequence. Note that this port is not really passed to the interfaces,
* they will get the primary port themselves. */
- ctx->port = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (ctx->self)));
if (!mm_serial_port_open (MM_SERIAL_PORT (ctx->port), &error)) {
g_simple_async_result_take_error (ctx->result, error);
initialize_context_complete_and_free (ctx);
diff --git a/src/mm-iface-modem-3gpp-ussd.c b/src/mm-iface-modem-3gpp-ussd.c
index 4e6b47f4..fd902142 100644
--- a/src/mm-iface-modem-3gpp-ussd.c
+++ b/src/mm-iface-modem-3gpp-ussd.c
@@ -405,7 +405,6 @@ typedef enum {
struct _DisablingContext {
MMIfaceModem3gppUssd *self;
- MMAtSerialPort *primary;
DisablingStep step;
GSimpleAsyncResult *result;
MmGdbusModem3gppUssd *skeleton;
@@ -420,7 +419,6 @@ disabling_context_new (MMIfaceModem3gppUssd *self,
ctx = g_new0 (DisablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -439,7 +437,6 @@ disabling_context_complete_and_free (DisablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
@@ -551,7 +548,6 @@ typedef enum {
struct _EnablingContext {
MMIfaceModem3gppUssd *self;
- MMAtSerialPort *primary;
EnablingStep step;
GSimpleAsyncResult *result;
MmGdbusModem3gppUssd *skeleton;
@@ -566,7 +562,6 @@ enabling_context_new (MMIfaceModem3gppUssd *self,
ctx = g_new0 (EnablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -585,7 +580,6 @@ enabling_context_complete_and_free (EnablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
index 03a86967..78cf94d3 100644
--- a/src/mm-iface-modem-3gpp.c
+++ b/src/mm-iface-modem-3gpp.c
@@ -925,7 +925,6 @@ typedef enum {
struct _DisablingContext {
MMIfaceModem3gpp *self;
- MMAtSerialPort *primary;
DisablingStep step;
GSimpleAsyncResult *result;
MmGdbusModem *skeleton;
@@ -940,7 +939,6 @@ disabling_context_new (MMIfaceModem3gpp *self,
ctx = g_new0 (DisablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -959,7 +957,6 @@ disabling_context_complete_and_free (DisablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
@@ -1148,7 +1145,6 @@ typedef enum {
struct _EnablingContext {
MMIfaceModem3gpp *self;
- MMAtSerialPort *primary;
EnablingStep step;
GSimpleAsyncResult *result;
MmGdbusModem3gpp *skeleton;
@@ -1163,7 +1159,6 @@ enabling_context_new (MMIfaceModem3gpp *self,
ctx = g_new0 (EnablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -1182,7 +1177,6 @@ enabling_context_complete_and_free (EnablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
diff --git a/src/mm-iface-modem-cdma.c b/src/mm-iface-modem-cdma.c
index c5983ddf..ec5d27e6 100644
--- a/src/mm-iface-modem-cdma.c
+++ b/src/mm-iface-modem-cdma.c
@@ -1101,7 +1101,6 @@ typedef enum {
struct _DisablingContext {
MMIfaceModemCdma *self;
- MMAtSerialPort *primary;
DisablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemCdma *skeleton;
@@ -1116,7 +1115,6 @@ disabling_context_new (MMIfaceModemCdma *self,
ctx = g_new0 (DisablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -1135,7 +1133,6 @@ disabling_context_complete_and_free (DisablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
@@ -1196,7 +1193,6 @@ typedef enum {
struct _EnablingContext {
MMIfaceModemCdma *self;
- MMAtSerialPort *primary;
EnablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemCdma *skeleton;
@@ -1211,7 +1207,6 @@ enabling_context_new (MMIfaceModemCdma *self,
ctx = g_new0 (EnablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -1230,7 +1225,6 @@ enabling_context_complete_and_free (EnablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
diff --git a/src/mm-iface-modem-location.c b/src/mm-iface-modem-location.c
index a021a563..09933375 100644
--- a/src/mm-iface-modem-location.c
+++ b/src/mm-iface-modem-location.c
@@ -451,7 +451,6 @@ typedef enum {
struct _DisablingContext {
MMIfaceModemLocation *self;
- MMAtSerialPort *primary;
DisablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemLocation *skeleton;
@@ -466,7 +465,6 @@ disabling_context_new (MMIfaceModemLocation *self,
ctx = g_new0 (DisablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -485,7 +483,6 @@ disabling_context_complete_and_free (DisablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
@@ -575,7 +572,6 @@ typedef enum {
struct _EnablingContext {
MMIfaceModemLocation *self;
- MMAtSerialPort *primary;
EnablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemLocation *skeleton;
@@ -590,7 +586,6 @@ enabling_context_new (MMIfaceModemLocation *self,
ctx = g_new0 (EnablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -609,7 +604,6 @@ enabling_context_complete_and_free (EnablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
diff --git a/src/mm-iface-modem-messaging.c b/src/mm-iface-modem-messaging.c
index 2545cdc0..cf9f0d34 100644
--- a/src/mm-iface-modem-messaging.c
+++ b/src/mm-iface-modem-messaging.c
@@ -486,7 +486,6 @@ typedef enum {
struct _DisablingContext {
MMIfaceModemMessaging *self;
- MMAtSerialPort *primary;
DisablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemMessaging *skeleton;
@@ -501,7 +500,6 @@ disabling_context_new (MMIfaceModemMessaging *self,
ctx = g_new0 (DisablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -520,7 +518,6 @@ disabling_context_complete_and_free (DisablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
@@ -648,7 +645,6 @@ typedef enum {
struct _EnablingContext {
MMIfaceModemMessaging *self;
- MMAtSerialPort *primary;
EnablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemMessaging *skeleton;
@@ -665,7 +661,6 @@ enabling_context_new (MMIfaceModemMessaging *self,
ctx = g_new0 (EnablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -684,7 +679,6 @@ enabling_context_complete_and_free (EnablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
diff --git a/src/mm-iface-modem-time.c b/src/mm-iface-modem-time.c
index 2502ceca..70f3ed05 100644
--- a/src/mm-iface-modem-time.c
+++ b/src/mm-iface-modem-time.c
@@ -395,7 +395,6 @@ typedef enum {
struct _DisablingContext {
MMIfaceModemTime *self;
- MMAtSerialPort *primary;
DisablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemTime *skeleton;
@@ -410,7 +409,6 @@ disabling_context_new (MMIfaceModemTime *self,
ctx = g_new0 (DisablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -429,7 +427,6 @@ disabling_context_complete_and_free (DisablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
@@ -570,7 +567,6 @@ typedef enum {
struct _EnablingContext {
MMIfaceModemTime *self;
- MMAtSerialPort *primary;
EnablingStep step;
GSimpleAsyncResult *result;
MmGdbusModemTime *skeleton;
@@ -585,7 +581,6 @@ enabling_context_new (MMIfaceModemTime *self,
ctx = g_new0 (EnablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -604,7 +599,6 @@ enabling_context_complete_and_free (EnablingContext *ctx)
{
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
g_object_unref (ctx->result);
g_object_unref (ctx->skeleton);
g_free (ctx);
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index 32f66a7a..0e3b0017 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -2300,13 +2300,9 @@ disabling_context_new (MMIfaceModem *self,
ctx = g_new0 (DisablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
+ ctx->primary = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
ctx->secondary = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
- if (ctx->secondary)
- g_object_ref (ctx->secondary);
ctx->qcdm = mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
- if (ctx->qcdm)
- g_object_ref (ctx->qcdm);
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -2341,7 +2337,8 @@ disabling_context_complete_and_free (DisablingContext *ctx)
MM_MODEM_STATE_CHANGE_REASON_UNKNOWN);
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
+ if (ctx->primary)
+ g_object_unref (ctx->primary);
if (ctx->secondary)
g_object_unref (ctx->secondary);
if (ctx->qcdm)
@@ -2427,7 +2424,7 @@ interface_disabling_step (DisablingContext *ctx)
* be safe to check whether they are really open before trying to close.
*/
mm_dbg ("Closing all ports...");
- if (mm_serial_port_is_open (MM_SERIAL_PORT (ctx->primary)))
+ if (ctx->primary && mm_serial_port_is_open (MM_SERIAL_PORT (ctx->primary)))
mm_serial_port_close (MM_SERIAL_PORT (ctx->primary));
if (ctx->secondary && mm_serial_port_is_open (MM_SERIAL_PORT (ctx->secondary)))
mm_serial_port_close (MM_SERIAL_PORT (ctx->secondary));
@@ -2503,13 +2500,9 @@ enabling_context_new (MMIfaceModem *self,
ctx = g_new0 (EnablingContext, 1);
ctx->self = g_object_ref (self);
- ctx->primary = g_object_ref (mm_base_modem_get_port_primary (MM_BASE_MODEM (self)));
+ ctx->primary = mm_base_modem_get_port_primary (MM_BASE_MODEM (self));
ctx->secondary = mm_base_modem_get_port_secondary (MM_BASE_MODEM (self));
- if (ctx->secondary)
- g_object_ref (ctx->secondary);
ctx->qcdm = mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
- if (ctx->qcdm)
- g_object_ref (ctx->qcdm);
ctx->result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
@@ -2554,7 +2547,8 @@ enabling_context_complete_and_free (EnablingContext *ctx)
}
g_object_unref (ctx->self);
- g_object_unref (ctx->primary);
+ if (ctx->primary)
+ g_object_unref (ctx->primary);
if (ctx->secondary)
g_object_unref (ctx->secondary);
if (ctx->qcdm)
@@ -2737,6 +2731,15 @@ interface_enabling_step (EnablingContext *ctx)
GError *error = NULL;
/* Open primary port */
+ if (!ctx->primary) {
+ g_simple_async_result_set_error (ctx->result,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Cannot enable: no primary port");
+ enabling_context_complete_and_free (ctx);
+ return;
+ }
+
if (!mm_serial_port_open (MM_SERIAL_PORT (ctx->primary), &error)) {
g_simple_async_result_take_error (ctx->result, error);
enabling_context_complete_and_free (ctx);
diff --git a/src/mm-sim.c b/src/mm-sim.c
index 95a1eec5..fbb20752 100644
--- a/src/mm-sim.c
+++ b/src/mm-sim.c
@@ -1386,15 +1386,11 @@ struct _InitAsyncContext {
MMSim *self;
InitializationStep step;
guint sim_identifier_tries;
- MMAtSerialPort *port;
};
static void
-init_async_context_free (InitAsyncContext *ctx,
- gboolean close_port)
+init_async_context_free (InitAsyncContext *ctx)
{
- if (close_port)
- mm_serial_port_close (MM_SERIAL_PORT (ctx->port));
g_object_unref (ctx->self);
g_object_unref (ctx->result);
if (ctx->cancellable)
@@ -1569,7 +1565,7 @@ interface_initialization_step (InitAsyncContext *ctx)
/* We are done without errors! */
g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
g_simple_async_result_complete_in_idle (ctx->result);
- init_async_context_free (ctx, TRUE);
+ init_async_context_free (ctx);
return;
}
@@ -1585,7 +1581,6 @@ common_init_async (GAsyncInitable *initable,
{
InitAsyncContext *ctx;
- GError *error = NULL;
ctx = g_new (InitAsyncContext, 1);
ctx->self = g_object_ref (initable);
@@ -1599,14 +1594,6 @@ common_init_async (GAsyncInitable *initable,
ctx->step = INITIALIZATION_STEP_FIRST;
ctx->sim_identifier_tries = 0;
- ctx->port = mm_base_modem_get_port_primary (ctx->self->priv->modem);
- if (!mm_serial_port_open (MM_SERIAL_PORT (ctx->port), &error)) {
- g_simple_async_result_take_error (ctx->result, error);
- g_simple_async_result_complete_in_idle (ctx->result);
- init_async_context_free (ctx, FALSE);
- return;
- }
-
interface_initialization_step (ctx);
}