]> git.cworth.org Git - notmuch/commitdiff
CLI: centralize initialization in notmuch_client_init
authorDavid Bremner <david@tethera.net>
Wed, 12 May 2021 23:22:18 +0000 (20:22 -0300)
committerDavid Bremner <david@tethera.net>
Fri, 14 May 2021 09:40:37 +0000 (06:40 -0300)
Initially make sure gmime_filter_reply initialization is
thread-safe (assuming notmuch_client_init is only called once).
For tidyness, also put talloc initialization in the new function.

Makefile.local
gmime-filter-reply.c
gmime-filter-reply.h
notmuch-client.h
notmuch.c

index bbb8f0b61a3fab43819e906ad3a2a9b3195b65f2..e12b94cd6f668bfc830070ec24d924ff8941bebf 100644 (file)
@@ -231,6 +231,7 @@ notmuch_client_srcs =               \
        gmime-filter-reply.c    \
        hooks.c                 \
        notmuch.c               \
+       notmuch-client-init.c   \
        notmuch-compact.c       \
        notmuch-config.c        \
        notmuch-count.c         \
index 2b0676698b8ff7225b164c9db52ab5ad5b5ea314..35349cc8170fdd7abcaa08684e83320eb9f1df08 100644 (file)
@@ -43,29 +43,31 @@ static void filter_reset (GMimeFilter *filter);
 
 
 static GMimeFilterClass *parent_class = NULL;
+static GType type = 0;
+static const GTypeInfo info = {
+    .class_size = sizeof (GMimeFilterReplyClass),
+    .base_init = NULL,
+    .base_finalize = NULL,
+    .class_init = (GClassInitFunc) g_mime_filter_reply_class_init,
+    .class_finalize = NULL,
+    .class_data = NULL,
+    .instance_size = sizeof (GMimeFilterReply),
+    .n_preallocs = 0,
+    .instance_init = (GInstanceInitFunc) g_mime_filter_reply_init,
+    .value_table = NULL,
+};
+
+
+void
+g_mime_filter_reply_module_init (void)
+{
+    type = g_type_register_static (GMIME_TYPE_FILTER, "GMimeFilterReply", &info, (GTypeFlags) 0);
+    parent_class = (GMimeFilterClass *) g_type_class_ref (GMIME_TYPE_FILTER);
+}
 
 GType
 g_mime_filter_reply_get_type (void)
 {
-    static GType type = 0;
-
-    if (! type) {
-       static const GTypeInfo info = {
-           .class_size = sizeof (GMimeFilterReplyClass),
-           .base_init = NULL,
-           .base_finalize = NULL,
-           .class_init = (GClassInitFunc) g_mime_filter_reply_class_init,
-           .class_finalize = NULL,
-           .class_data = NULL,
-           .instance_size = sizeof (GMimeFilterReply),
-           .n_preallocs = 0,
-           .instance_init = (GInstanceInitFunc) g_mime_filter_reply_init,
-           .value_table = NULL,
-       };
-
-       type = g_type_register_static (GMIME_TYPE_FILTER, "GMimeFilterReply", &info, (GTypeFlags) 0);
-    }
-
     return type;
 }
 
@@ -76,8 +78,6 @@ g_mime_filter_reply_class_init (GMimeFilterReplyClass *klass, unused (void *clas
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
     GMimeFilterClass *filter_class = GMIME_FILTER_CLASS (klass);
 
-    parent_class = (GMimeFilterClass *) g_type_class_ref (GMIME_TYPE_FILTER);
-
     object_class->finalize = g_mime_filter_reply_finalize;
 
     filter_class->copy = filter_copy;
index 7cdefcd1f127ff45e5ca9cbd63bf0f541816e1c9..988fe2d6e8c5122fcbc523e8ceefdab4e38bd38e 100644 (file)
@@ -21,6 +21,8 @@
 
 #include <gmime/gmime-filter.h>
 
+void g_mime_filter_reply_module_init (void);
+
 G_BEGIN_DECLS
 
 #define GMIME_TYPE_FILTER_REPLY            (g_mime_filter_reply_get_type ())
index 270553ad7f1cc9d5f79c4a20226301fdb2f49871..8227fea479d4e234da32c4e2f9d26dfd4f60cf41 100644 (file)
@@ -250,6 +250,10 @@ json_quote_chararray (const void *ctx, const char *str, const size_t len);
 char *
 json_quote_str (const void *ctx, const char *str);
 
+/* notmuch-client-init.c */
+
+void notmuch_client_init (void);
+
 /* notmuch-config.c */
 
 typedef enum {
index 2429999c2694345dd71b556e282b6dbb5a943dbe..9ca3a4beffc01d509b2ad8ae7fe9b7ebf8d08b42 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -464,15 +464,10 @@ main (int argc, char *argv[])
        { }
     };
 
-    talloc_enable_null_tracking ();
+    notmuch_client_init ();
 
     local = talloc_new (NULL);
 
-    g_mime_init ();
-#if ! GLIB_CHECK_VERSION (2, 35, 1)
-    g_type_init ();
-#endif
-
     /* Globally default to the current output format version. */
     notmuch_format_version = NOTMUCH_FORMAT_CUR;