--- /dev/null
+diff -up gc-7.1/thread_local_alloc.c.gcinit gc-7.1/thread_local_alloc.c
+--- gc-7.1/thread_local_alloc.c.gcinit 2007-10-24 19:22:37.000000000 -0500
++++ gc-7.1/thread_local_alloc.c 2008-10-15 07:13:45.000000000 -0500
+@@ -141,6 +141,9 @@ void * GC_malloc(size_t bytes)
+ void *result;
+ void **tiny_fl;
+
++ if (!GC_is_initialized)
++ GC_init();
++
+ # if !defined(USE_PTHREAD_SPECIFIC) && !defined(USE_WIN32_SPECIFIC)
+ GC_key_t k = GC_thread_key;
+ if (EXPECT(0 == k, 0)) {
+diff -up gc-7.1/malloc.c.gcinit gc-7.1/malloc.c
+--- gc-7.1/malloc.c.gcinit 2008-03-10 00:33:41.000000000 -0500
++++ gc-7.1/malloc.c 2008-10-15 07:12:31.000000000 -0500
+@@ -263,6 +263,9 @@ void * GC_generic_malloc(size_t lb, int
+ size_t lg;
+ DCL_LOCK_STATE;
+
++ if (!GC_is_initialized)
++ GC_init();
++
+ if(SMALL_OBJ(lb)) {
+ lg = GC_size_map[lb];
+ opp = (void **)&(GC_objfreelist[lg]);