summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2008-03-04 11:14:32 +0000
committerAlexander Larsson <alexl@src.gnome.org>2008-03-04 11:14:32 +0000
commitc71bb3706203039a18dac2eb3dc2ee53c8493cb8 (patch)
tree3c0d4b212ad9b09a63dbf70ebc77931edcbf09ba /common
parent13a1cd21fe5bbeb50c16b0a3cc68a0acb1af90b2 (diff)
downloadgvfs-c71bb3706203039a18dac2eb3dc2ee53c8493cb8.tar.gz
Work around problems with type registering when the common code is used in
2008-03-04 Alexander Larsson <alexl@redhat.com> * common/gmountsource.c: * common/gmounttracker.c: Work around problems with type registering when the common code is used in both daemon and client. svn path=/trunk/; revision=1521
Diffstat (limited to 'common')
-rw-r--r--common/gmountsource.c25
-rw-r--r--common/gmounttracker.c26
2 files changed, 51 insertions, 0 deletions
diff --git a/common/gmountsource.c b/common/gmountsource.c
index 8e9ed961..8445def9 100644
--- a/common/gmountsource.c
+++ b/common/gmountsource.c
@@ -35,7 +35,32 @@ struct _GMountSource
char *obj_path;
};
+/* We use this hack to avoid problems when this code
+ is shared in both the daemon and the client */
+static GType _g_mount_source_get_type (void) G_GNUC_CONST;
+
+#define g_mount_source_get_type _g_mount_source_get_type
G_DEFINE_TYPE (GMountSource, g_mount_source, G_TYPE_OBJECT)
+#undef g_mount_source_get_type
+
+GType
+g_mount_source_get_type (void)
+{
+ static volatile gsize type_volatile = 0;
+
+ if (g_once_init_enter (&type_volatile))
+ {
+ GType type;
+
+ type = g_type_from_name ("GMountSource");
+ if (type == 0)
+ type = _g_mount_source_get_type ();
+
+ g_once_init_leave (&type_volatile, type);
+ }
+
+ return type_volatile;
+}
static void
g_mount_source_finalize (GObject *object)
diff --git a/common/gmounttracker.c b/common/gmounttracker.c
index 2780cdfc..9ea240d6 100644
--- a/common/gmounttracker.c
+++ b/common/gmounttracker.c
@@ -54,7 +54,33 @@ struct _GMountTracker
DBusConnection *connection;
};
+/* We use this hack to avoid problems when this code
+ is shared in both the daemon and the client */
+static GType _g_mount_tracker_get_type (void) G_GNUC_CONST;
+
+#define g_mount_tracker_get_type _g_mount_tracker_get_type
G_DEFINE_TYPE (GMountTracker, g_mount_tracker, G_TYPE_OBJECT)
+#undef g_mount_tracker_get_type
+
+GType
+g_mount_tracker_get_type (void)
+{
+ static volatile gsize type_volatile = 0;
+
+ if (g_once_init_enter (&type_volatile))
+ {
+ GType type;
+
+ type = g_type_from_name ("GMountTracker");
+ if (type == 0)
+ type = _g_mount_tracker_get_type ();
+
+ g_once_init_leave (&type_volatile, type);
+ }
+
+ return type_volatile;
+}
+
static DBusHandlerResult g_mount_tracker_filter_func (DBusConnection *conn,
DBusMessage *message,