summaryrefslogtreecommitdiff
path: root/misc/amanda26-server/files/patch-common-src__glib-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc/amanda26-server/files/patch-common-src__glib-util.c')
-rw-r--r--misc/amanda26-server/files/patch-common-src__glib-util.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/misc/amanda26-server/files/patch-common-src__glib-util.c b/misc/amanda26-server/files/patch-common-src__glib-util.c
new file mode 100644
index 000000000000..eb92dddcfc54
--- /dev/null
+++ b/misc/amanda26-server/files/patch-common-src__glib-util.c
@@ -0,0 +1,91 @@
+--- common-src/glib-util.c.orig 2008-12-01 21:17:19.000000000 +0000
++++ common-src/glib-util.c 2013-02-07 15:54:40.000000000 +0000
+@@ -38,26 +38,15 @@
+ if (did_glib_init) return;
+ did_glib_init = TRUE;
+
+- /* Initialize glib's type system */
+- g_type_init();
+-
+ /* set up libcurl (this must happen before threading
+ * is initialized) */
+ #ifdef HAVE_LIBCURL
+ # ifdef G_THREADS_ENABLED
+- g_assert(!g_thread_supported());
++ g_assert(!g_thread_supported()); /* assert threads aren't initialized yet */
+ # endif
+ g_assert(curl_global_init(CURL_GLOBAL_ALL) == 0);
+ #endif
+
+- /* And set up glib's threads */
+-#if defined(G_THREADS_ENABLED) && !defined(G_THREADS_IMPL_NONE)
+- if (g_thread_supported()) {
+- return;
+- }
+- g_thread_init(NULL);
+-#endif
+-
+ /* do a version check */
+ #if GLIB_CHECK_VERSION(2,6,0)
+ {
+@@ -71,6 +60,17 @@
+ }
+ }
+ #endif
++
++ /* Initialize glib's type system. On glib >= 2.24, this will initialize
++ * threads, so it must be done after curl is initialized. */
++ g_type_init();
++
++ /* And set up glib's threads */
++#if defined(G_THREADS_ENABLED) && !defined(G_THREADS_IMPL_NONE)
++ if (!g_thread_supported())
++ g_thread_init(NULL);
++#endif
++
+ }
+
+ typedef enum {
+@@ -107,38 +107,19 @@
+ return to;
+ }
+
+-void g_list_free_full(GList * list) {
+- GList * cur = list;
+-
+- while (cur != NULL) {
+- gpointer data = cur->data;
+- amfree(data);
+- cur = g_list_next(cur);
+- }
+-
+- g_list_free(list);
+-}
+-
+-void g_slist_free_full(GSList * list) {
++#if (GLIB_MAJOR_VERSION < 2 || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 28))
++void _slist_free_full(GSList * list, GDestroyNotify free_fn) {
+ GSList * cur = list;
+
+ while (cur != NULL) {
+ gpointer data = cur->data;
+- amfree(data);
++ free_fn(data);
+ cur = g_slist_next(cur);
+ }
+
+ g_slist_free(list);
+ }
+-
+-void g_queue_free_full(GQueue * queue) {
+- while (!g_queue_is_empty(queue)) {
+- gpointer data;
+- data = g_queue_pop_head(queue);
+- amfree(data);
+- }
+- g_queue_free(queue);
+-}
++#endif
+
+ void g_ptr_array_free_full(GPtrArray * array) {
+ size_t i;