[evolution-data-server] Bug #681837 - Make enum type registration thread safe



commit 5e858bb25e70a66b26b8f235423736c19bb09b96
Author: Milan Crha <mcrha redhat com>
Date:   Fri Apr 12 09:44:42 2013 +0200

    Bug #681837 - Make enum type registration thread safe

 Makefile.am                                        |    2 +
 addressbook/libebook-contacts/Makefile.am          |   15 +++++---
 .../e-book-contacts-enumtypes.h.template           |   27 --------------
 addressbook/libebook/Makefile.am                   |   17 +++++----
 addressbook/libebook/e-book-enumtypes.c.template   |   38 --------------------
 addressbook/libebook/e-book-enumtypes.h.template   |   27 --------------
 calendar/libecal/Makefile.am                       |   17 +++++----
 calendar/libecal/e-cal-enumtypes.c.template        |   38 --------------------
 camel/Makefile.am                                  |   15 +++++---
 camel/camel-enumtypes.c.template                   |   38 --------------------
 camel/camel-enumtypes.h.template                   |   27 --------------
 ...ts-enumtypes.c.template => enumtypes.c.template |   13 +++----
 ...al-enumtypes.h.template => enumtypes.h.template |   11 ++----
 libebackend/Makefile.am                            |   17 +++++----
 libebackend/e-backend-enumtypes.c.template         |   38 --------------------
 libebackend/e-backend-enumtypes.h.template         |   27 --------------
 libedataserver/Makefile.am                         |   15 +++++---
 libedataserver/e-source-enumtypes.c.template       |   38 --------------------
 libedataserver/e-source-enumtypes.h.template       |   27 --------------
 19 files changed, 69 insertions(+), 378 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index f584b73..f7d4d84 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -26,6 +26,8 @@ EXTRA_DIST =                                          \
        MAINTAINERS                                     \
        TODO                                            \
        NEWS                                            \
+       enumtypes.c.template                            \
+       enumtypes.h.template                            \
        iconv-detect.c                                  \
        intltool-merge.in                               \
        intltool-update.in                              \
diff --git a/addressbook/libebook-contacts/Makefile.am b/addressbook/libebook-contacts/Makefile.am
index 02be0ef..ab1e3c2 100644
--- a/addressbook/libebook-contacts/Makefile.am
+++ b/addressbook/libebook-contacts/Makefile.am
@@ -3,11 +3,16 @@ BUILT_SOURCES=
 
 ENUM_TYPES = e-book-contacts-types.h
 
-e-book-contacts-enumtypes.h: e-book-contacts-enumtypes.h.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-book-contacts-enumtypes.h.template 
$(ENUM_TYPES)) > $@
+e-book-contacts-enumtypes.h: $(top_srcdir)/enumtypes.h.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.h.template \
+               --fhead "#ifndef E_BOOK_CONTACTS_ENUMTYPES_H\n#define E_BOOK_CONTACTS_ENUMTYPES_H\n" \
+               --ftail "#endif /* E_BOOK_CONTACTS_ENUMTYPES_H */\n" \
+               $(ENUM_TYPES)) > $@
 
-e-book-contacts-enumtypes.c: e-book-contacts-enumtypes.c.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-book-contacts-enumtypes.c.template 
$(ENUM_TYPES)) > $@
+e-book-contacts-enumtypes.c: $(top_srcdir)/enumtypes.c.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.c.template \
+               --fhead "#include \"e-book-contacts-enumtypes.h\"" \
+               $(ENUM_TYPES)) > $@
 
 ENUM_GENERATED = e-book-contacts-enumtypes.h e-book-contacts-enumtypes.c
 
@@ -155,8 +160,6 @@ DISTCLEANFILES = $(pkgconfig_DATA)
 
 EXTRA_DIST =                                           \
        $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)     \
-       e-book-contacts-enumtypes.h.template                    \
-       e-book-contacts-enumtypes.c.template                    \
        e-name-western-tables.h.in                      \
        gen-western-table.py
 
diff --git a/addressbook/libebook/Makefile.am b/addressbook/libebook/Makefile.am
index 5613bb1..5bba184 100644
--- a/addressbook/libebook/Makefile.am
+++ b/addressbook/libebook/Makefile.am
@@ -3,11 +3,16 @@ BUILT_SOURCES=
 
 ENUM_TYPES = e-book-types.h
 
-e-book-enumtypes.h: e-book-enumtypes.h.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-book-enumtypes.h.template $(ENUM_TYPES)) > 
$@
+e-book-enumtypes.h: $(top_srcdir)/enumtypes.h.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.h.template \
+               --fhead "#ifndef E_BOOK_ENUMTYPES_H\n#define E_BOOK_ENUMTYPES_H\n" \
+               --ftail "#endif /* E_BOOK_ENUMTYPES_H */\n" \
+               $(ENUM_TYPES)) > $@
 
-e-book-enumtypes.c: e-book-enumtypes.c.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-book-enumtypes.c.template $(ENUM_TYPES)) > 
$@
+e-book-enumtypes.c: $(top_srcdir)/enumtypes.c.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.c.template \
+               --fhead "#include \"e-book-enumtypes.h\"" \
+               $(ENUM_TYPES)) > $@
 
 ENUM_GENERATED = e-book-enumtypes.h e-book-enumtypes.c
 
@@ -142,9 +147,7 @@ CLEANFILES    += $(BUILT_SOURCES)
 DISTCLEANFILES = $(pkgconfig_DATA)
 
 EXTRA_DIST =                                           \
-       $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)     \
-       e-book-enumtypes.h.template                     \
-       e-book-enumtypes.c.template
+       $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)
 
 dist-hook:
        cd $(distdir); rm -f $(BUILT_SOURCES)
diff --git a/calendar/libecal/Makefile.am b/calendar/libecal/Makefile.am
index 46945fa..04f70e7 100644
--- a/calendar/libecal/Makefile.am
+++ b/calendar/libecal/Makefile.am
@@ -1,10 +1,15 @@
 ENUM_TYPES = e-cal-types.h
 
-e-cal-enumtypes.h: e-cal-enumtypes.h.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-cal-enumtypes.h.template $(ENUM_TYPES)) > $@
+e-cal-enumtypes.h: $(top_srcdir)/enumtypes.h.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.h.template \
+               --fhead "#ifndef E_CAL_ENUMTYPES_H\n#define E_CAL_ENUMTYPES_H\n" \
+               --ftail "#endif /* E_CAL_ENUMTYPES_H */\n" \
+               $(ENUM_TYPES)) > $@
 
-e-cal-enumtypes.c: e-cal-enumtypes.c.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-cal-enumtypes.c.template $(ENUM_TYPES)) > $@
+e-cal-enumtypes.c: $(top_srcdir)/enumtypes.c.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.c.template \
+               --fhead "#include \"e-cal-enumtypes.h\"" \
+               $(ENUM_TYPES)) > $@
 
 ENUM_GENERATED = e-cal-enumtypes.h e-cal-enumtypes.c
 
@@ -90,9 +95,7 @@ CLEANFILES = $(BUILT_SOURCES)
 DISTCLEANFILES = $(pkgconfig_DATA)
 
 EXTRA_DIST =                                           \
-       $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)     \
-       e-cal-enumtypes.h.template                      \
-       e-cal-enumtypes.c.template
+       $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)
 
 dist-hook:
        cd $(distdir); rm -f $(BUILT_SOURCES)
diff --git a/camel/Makefile.am b/camel/Makefile.am
index 7d3a4d1..395c92c 100644
--- a/camel/Makefile.am
+++ b/camel/Makefile.am
@@ -31,11 +31,16 @@ lib_LTLIBRARIES = libcamel-1.2.la
 
 ENUM_TYPES = camel-enums.h
 
-camel-enumtypes.h: camel-enumtypes.h.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template camel-enumtypes.h.template $(ENUM_TYPES)) > $@
+camel-enumtypes.h: $(top_srcdir)/enumtypes.h.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.h.template \
+               --fhead "#ifndef CAMEL_ENUMTYPES_H\n#define CAMEL_ENUMTYPES_H\n" \
+               --ftail "#endif /* CAMEL_ENUMTYPES_H */\n" \
+               $(ENUM_TYPES)) > $@
 
-camel-enumtypes.c: camel-enumtypes.c.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template camel-enumtypes.c.template $(ENUM_TYPES)) > $@
+camel-enumtypes.c: $(top_srcdir)/enumtypes.c.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.c.template \
+               --fhead "#include \"camel-enumtypes.h\"" \
+               $(ENUM_TYPES)) > $@
 
 ENUM_GENERATED = camel-enumtypes.h camel-enumtypes.c camel-imapx-tokenise.h
 
@@ -419,8 +424,6 @@ BUILT_SOURCES =                                     \
 
 EXTRA_DIST =                                   \
        $(pkgconfig_in_files)                   \
-       camel-enumtypes.h.template              \
-       camel-enumtypes.c.template              \
        camel-imapx-tokens.txt                  \
        gentables.pl                            \
        README
diff --git a/addressbook/libebook-contacts/e-book-contacts-enumtypes.c.template b/enumtypes.c.template
similarity index 72%
rename from addressbook/libebook-contacts/e-book-contacts-enumtypes.c.template
rename to enumtypes.c.template
index 127154b..0a99121 100644
--- a/addressbook/libebook-contacts/e-book-contacts-enumtypes.c.template
+++ b/enumtypes.c.template
@@ -1,6 +1,4 @@
 /*** BEGIN file-header ***/
-#include "e-book-contacts-enumtypes.h"
-
 /*** END file-header ***/
 
 /*** BEGIN file-production ***/
@@ -13,9 +11,9 @@
 GType
 @enum_name _get_type (void)
 {
-       static GType the_type = 0;
-       
-       if (the_type == 0) {
+       static volatile gsize the_type__volatile = 0;
+
+       if (g_once_init_enter (&the_type__volatile)) {
                static const G Type@Value values[] = {
 /*** END value-header ***/
 
@@ -28,11 +26,12 @@ GType
 /*** BEGIN value-tail ***/
                        { 0, NULL, NULL }
                };
-               the_type = g_ type@_register_static (
+               GType the_type = g_ type@_register_static (
                        g_intern_static_string ("@EnumName@"),
                        values);
+               g_once_init_leave (&the_type__volatile, the_type);
        }
-       return the_type;
+       return the_type__volatile;
 }
 
 /*** END value-tail ***/
diff --git a/calendar/libecal/e-cal-enumtypes.h.template b/enumtypes.h.template
similarity index 74%
rename from calendar/libecal/e-cal-enumtypes.h.template
rename to enumtypes.h.template
index ad99fe3..e421edd 100644
--- a/calendar/libecal/e-cal-enumtypes.h.template
+++ b/enumtypes.h.template
@@ -1,20 +1,18 @@
 /*** BEGIN file-header ***/
-#ifndef E_CAL_ENUMTYPES_H
-#define E_CAL_ENUMTYPES_H
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
 
 #include <glib-object.h>
 
 G_BEGIN_DECLS
 
-/*** END file-header ***/
-
-/*** BEGIN file-production ***/
 /* Enumerations from "@filename@" */
 
 /*** END file-production ***/
 
 /*** BEGIN enumeration-production ***/
-#define E_TYPE_ ENUMSHORT@     (@enum_name _get_type())
+#define @ENUMPREFIX _TYPE_@ENUMSHORT@  (@enum_name _get_type())
 GType @enum_name _get_type     (void) G_GNUC_CONST;
 
 /*** END enumeration-production ***/
@@ -22,6 +20,5 @@ GType @enum_name _get_type    (void) G_GNUC_CONST;
 /*** BEGIN file-tail ***/
 G_END_DECLS
 
-#endif /* E_CAL_ENUMTYPES_H */
 /*** END file-tail ***/
 
diff --git a/libebackend/Makefile.am b/libebackend/Makefile.am
index b6a2685..dac8a82 100644
--- a/libebackend/Makefile.am
+++ b/libebackend/Makefile.am
@@ -1,10 +1,15 @@
 ENUM_TYPES = e-backend-enums.h
 
-e-backend-enumtypes.h: e-backend-enumtypes.h.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-backend-enumtypes.h.template $(ENUM_TYPES)) 
$@
+e-backend-enumtypes.h: $(top_srcdir)/enumtypes.h.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.h.template \
+               --fhead "#ifndef E_BACKEND_ENUMTYPES_H\n#define E_BACKEND_ENUMTYPES_H\n" \
+               --ftail "#endif /* E_BACKEND_ENUMTYPES_H */\n" \
+               $(ENUM_TYPES)) > $@
 
-e-backend-enumtypes.c: e-backend-enumtypes.c.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-backend-enumtypes.c.template $(ENUM_TYPES)) 
$@
+e-backend-enumtypes.c: $(top_srcdir)/enumtypes.c.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.c.template \
+               --fhead "#include \"e-backend-enumtypes.h\"" \
+               $(ENUM_TYPES)) > $@
 
 ENUM_GENERATED = e-backend-enumtypes.h e-backend-enumtypes.c
 
@@ -115,9 +120,7 @@ gsettings_SCHEMAS = \
 
 EXTRA_DIST =                                           \
        $(gsettings_SCHEMAS)                            \
-       $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)     \
-       e-backend-enumtypes.h.template                  \
-       e-backend-enumtypes.c.template
+       $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)
 
 CLEANFILES = $(gsettings_SCHEMAS:.xml=.valid)
 
diff --git a/libedataserver/Makefile.am b/libedataserver/Makefile.am
index 671571d..c601a50 100644
--- a/libedataserver/Makefile.am
+++ b/libedataserver/Makefile.am
@@ -1,10 +1,15 @@
 ENUM_TYPES = e-source-enums.h
 
-e-source-enumtypes.h: e-source-enumtypes.h.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-source-enumtypes.h.template $(ENUM_TYPES)) 
$@
+e-source-enumtypes.h: $(top_srcdir)/enumtypes.h.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.h.template \
+               --fhead "#ifndef E_SOURCE_ENUMTYPES_H\n#define E_SOURCE_ENUMTYPES_H\n" \
+               --ftail "#endif /* E_SOURCE_ENUMTYPES_H */\n" \
+               $(ENUM_TYPES)) > $@
 
-e-source-enumtypes.c: e-source-enumtypes.c.template $(ENUM_TYPES)
-       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template e-source-enumtypes.c.template $(ENUM_TYPES)) 
$@
+e-source-enumtypes.c: $(top_srcdir)/enumtypes.c.template $(ENUM_TYPES)
+       $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $(top_srcdir)/enumtypes.c.template \
+               --fhead "#include \"e-source-enumtypes.h\"" \
+               $(ENUM_TYPES)) > $@
 
 ENUM_GENERATED = e-source-enumtypes.h e-source-enumtypes.c
 
@@ -181,8 +186,6 @@ convert_DATA = libedataserver.convert
 EXTRA_DIST =                                           \
        $(pkgconfig_DATA:-$(API_VERSION).pc=.pc.in)     \
        eds-version.h.in                                \
-       e-source-enumtypes.h.template                   \
-       e-source-enumtypes.c.template                   \
        $(convert_DATA)                                 \
        $(gsettings_SCHEMAS:.xml=.xml.in)
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]