aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-bearer.c28
-rw-r--r--src/mm-bearer.h6
2 files changed, 27 insertions, 7 deletions
diff --git a/src/mm-bearer.c b/src/mm-bearer.c
index 383ef80c..01afd3b3 100644
--- a/src/mm-bearer.c
+++ b/src/mm-bearer.c
@@ -125,7 +125,22 @@ mm_bearer_export (MMBearer *self)
static void
mm_bearer_unexport (MMBearer *self)
{
- g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self));
+ const gchar *path;
+
+ path = g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (self));
+ /* Only unexport if currently exported */
+ if (path) {
+ mm_dbg ("Removing from DBus bearer at '%s'", path);
+ g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self));
+ }
+}
+
+/*****************************************************************************/
+
+const gchar *
+mm_bearer_get_path (MMBearer *self)
+{
+ return self->priv->path;
}
/*****************************************************************************/
@@ -221,7 +236,7 @@ mm_bearer_new (MMBaseModem *modem,
g_assert_cmpuint (mm_count_bits_set (capability), ==, 1);
/* Build the unique path for the Bearer, and create the object */
- path = g_strdup_printf (MM_DBUS_PATH"/Bearers/%d", id++);
+ path = g_strdup_printf (MM_DBUS_BEARER_PREFIX "%d", id++);
bearer = g_object_new (MM_TYPE_BEARER,
MM_BEARER_PATH, path,
MM_BEARER_MODEM, modem,
@@ -273,13 +288,12 @@ set_property (GObject *object,
if (self->priv->modem)
g_object_unref (self->priv->modem);
self->priv->modem = g_value_dup_object (value);
- if (self->priv->modem) {
+ if (self->priv->modem)
/* Bind the modem's connection (which is set when it is exported,
* and unset when unexported) to the BEARER's connection */
g_object_bind_property (self->priv->modem, MM_BASE_MODEM_CONNECTION,
self, MM_BEARER_CONNECTION,
- G_BINDING_DEFAULT);
- }
+ G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
break;
case PROP_CAPABILITY:
self->priv->capability = g_value_get_flags (value);
@@ -382,8 +396,10 @@ dispose (GObject *object)
{
MMBearer *self = MM_BEARER (object);
- if (self->priv->connection)
+ if (self->priv->connection) {
+ mm_bearer_unexport (self);
g_clear_object (&self->priv->connection);
+ }
if (self->priv->modem)
g_clear_object (&self->priv->modem);
diff --git a/src/mm-bearer.h b/src/mm-bearer.h
index afc536a7..a1778a7f 100644
--- a/src/mm-bearer.h
+++ b/src/mm-bearer.h
@@ -39,7 +39,6 @@ typedef struct _MMBearerPrivate MMBearerPrivate;
#define MM_BEARER_CONNECTION "bearer-connection"
#define MM_BEARER_MODEM "bearer-modem"
#define MM_BEARER_CAPABILITY "bearer-capability"
-
/* same names as the ones used in DBus properties */
#define MM_BEARER_CONNECTION_APN "apn"
#define MM_BEARER_CONNECTION_IP_TYPE "ip-type"
@@ -47,6 +46,9 @@ typedef struct _MMBearerPrivate MMBearerPrivate;
#define MM_BEARER_CONNECTION_PASSWORD "password"
#define MM_BEARER_CONNECTION_NUMBER "number"
+/* Prefix for all bearer object paths */
+#define MM_DBUS_BEARER_PREFIX MM_DBUS_PATH "/Bearers/"
+
struct _MMBearer {
MmGdbusBearerSkeleton parent;
MMBearerPrivate *priv;
@@ -63,4 +65,6 @@ MMBearer *mm_bearer_new (MMBaseModem *modem,
MMModemCapability capability,
GError **error);
+const gchar *mm_bearer_get_path (MMBearer *bearer);
+
#endif /* MM_BEARER_H */