aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmm-glib/mm-common-helpers.c22
-rw-r--r--libmm-glib/mm-common-helpers.h3
-rw-r--r--libmm-glib/mm-manager.c20
-rw-r--r--src/main.c25
4 files changed, 35 insertions, 35 deletions
diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c
index 58277930..50c4c830 100644
--- a/libmm-glib/mm-common-helpers.c
+++ b/libmm-glib/mm-common-helpers.c
@@ -1889,3 +1889,25 @@ mm_utils_check_for_single_value (guint32 value)
return TRUE;
}
+
+/*****************************************************************************/
+/* DBus error handling */
+
+gboolean
+mm_common_register_errors (void)
+{
+ static volatile guint32 aux = 0;
+
+ if (G_LIKELY (aux))
+ return FALSE;
+
+ /* Register all known own errors */
+ aux |= MM_CORE_ERROR;
+ aux |= MM_MOBILE_EQUIPMENT_ERROR;
+ aux |= MM_CONNECTION_ERROR;
+ aux |= MM_SERIAL_ERROR;
+ aux |= MM_MESSAGE_ERROR;
+ aux |= MM_CDMA_ACTIVATION_ERROR;
+
+ return TRUE;
+}
diff --git a/libmm-glib/mm-common-helpers.h b/libmm-glib/mm-common-helpers.h
index 0ad6ea4c..a0037cd0 100644
--- a/libmm-glib/mm-common-helpers.h
+++ b/libmm-glib/mm-common-helpers.h
@@ -201,4 +201,7 @@ gboolean mm_utils_ishexstr (const gchar *hex);
gboolean mm_utils_check_for_single_value (guint32 value);
+/* DBus error handling */
+gboolean mm_common_register_errors (void);
+
#endif /* MM_COMMON_HELPERS_H */
diff --git a/libmm-glib/mm-manager.c b/libmm-glib/mm-manager.c
index d22c2136..c37daab3 100644
--- a/libmm-glib/mm-manager.c
+++ b/libmm-glib/mm-manager.c
@@ -24,6 +24,7 @@
#include <ModemManager.h>
#include "mm-helpers.h"
+#include "mm-common-helpers.h"
#include "mm-errors-types.h"
#include "mm-gdbus-manager.h"
#include "mm-manager.h"
@@ -961,26 +962,9 @@ mm_manager_uninhibit_device_sync (MMManager *manager,
/*****************************************************************************/
static void
-register_dbus_errors (void)
-{
- static volatile guint32 aux = 0;
-
- if (aux)
- return;
-
- /* Register all known own errors */
- aux |= MM_CORE_ERROR;
- aux |= MM_MOBILE_EQUIPMENT_ERROR;
- aux |= MM_CONNECTION_ERROR;
- aux |= MM_SERIAL_ERROR;
- aux |= MM_MESSAGE_ERROR;
- aux |= MM_CDMA_ACTIVATION_ERROR;
-}
-
-static void
mm_manager_init (MMManager *manager)
{
- register_dbus_errors ();
+ mm_common_register_errors ();
/* Setup private data */
manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
diff --git a/src/main.c b/src/main.c
index d11383c3..0067583e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -133,23 +133,14 @@ name_lost_cb (GDBusConnection *connection,
static void
register_dbus_errors (void)
{
- static volatile guint32 aux = 0;
-
- if (aux)
- return;
-
- /* Register all known own errors */
- aux |= MM_CORE_ERROR;
- aux |= MM_MOBILE_EQUIPMENT_ERROR;
- aux |= MM_CONNECTION_ERROR;
- aux |= MM_SERIAL_ERROR;
- aux |= MM_MESSAGE_ERROR;
- aux |= MM_CDMA_ACTIVATION_ERROR;
-
- /* We no longer use MM_CORE_ERROR_CANCELLED in the daemon, we rely on
- * G_IO_ERROR_CANCELLED internally */
- g_dbus_error_unregister_error (MM_CORE_ERROR, MM_CORE_ERROR_CANCELLED, MM_CORE_ERROR_DBUS_PREFIX ".Cancelled");
- g_dbus_error_register_error (G_IO_ERROR, G_IO_ERROR_CANCELLED, MM_CORE_ERROR_DBUS_PREFIX ".Cancelled");
+ /* This method will always return success once during runtime */
+ if (!mm_common_register_errors ())
+ return;
+
+ /* We no longer use MM_CORE_ERROR_CANCELLED in the daemon, we rely on
+ * G_IO_ERROR_CANCELLED internally */
+ g_dbus_error_unregister_error (MM_CORE_ERROR, MM_CORE_ERROR_CANCELLED, MM_CORE_ERROR_DBUS_PREFIX ".Cancelled");
+ g_dbus_error_register_error (G_IO_ERROR, G_IO_ERROR_CANCELLED, MM_CORE_ERROR_DBUS_PREFIX ".Cancelled");
}
int