Added module headers, made gtree.c thread-safe.
diff --git a/glib/gprimes.c b/glib/gprimes.c
index 3d45c1e..a431b95 100644
--- a/glib/gprimes.c
+++ b/glib/gprimes.c
@@ -1,5 +1,10 @@
-/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+/*
+ * gprimes.c - Prime number table and function(s).
+ *
+ * MT-Level: Safe
+ *
+ * GLIB - Library of useful routines for C programming
+ * Copyright 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
diff --git a/glib/gtree.c b/glib/gtree.c
index 0d7f78c..795f5e3 100644
--- a/glib/gtree.c
+++ b/glib/gtree.c
@@ -1,5 +1,11 @@
-/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+/*
+ * gtree.c - balanced binary tree container
+ *
+ * MT-Level: Safe
+ *
+ * GLIB - Library of useful routines for C programming
+ * Copyright 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ * Copyright 1998 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -80,6 +86,7 @@
 
 static GMemChunk *node_mem_chunk = NULL;
 static GSList *node_free_list = NULL;
+G_THREAD_SPROTECT(node_free_list)
 
 
 GTree*
@@ -238,6 +245,8 @@
   GTreeNode *node;
   GSList *tmp_list;
 
+  g_thread_lock(node_free_list);
+
   if (node_free_list)
     {
       tmp_list = node_free_list;
@@ -259,6 +268,8 @@
       node = g_chunk_new (GTreeNode, node_mem_chunk);
     }
 
+  g_thread_unlock(node_free_list);
+
   node->balance = 0;
   node->left = NULL;
   node->right = NULL;
@@ -273,7 +284,10 @@
 {
   if (node)
     {
+      g_thread_lock(node_free_list);
       node_free_list = g_slist_prepend (node_free_list, node);
+      g_thread_unlock(node_free_list);
+
       g_tree_node_destroy (node->right);
       g_tree_node_destroy (node->left);
     }
@@ -379,7 +393,9 @@
 	  node = g_tree_node_restore_right_balance (new_root, old_balance);
 	}
 
+      g_thread_lock(node_free_list);
       node_free_list = g_slist_prepend (node_free_list, garbage);
+      g_thread_unlock(node_free_list);
     }
   else if (cmp < 0)
     {
diff --git a/gprimes.c b/gprimes.c
index 3d45c1e..a431b95 100644
--- a/gprimes.c
+++ b/gprimes.c
@@ -1,5 +1,10 @@
-/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+/*
+ * gprimes.c - Prime number table and function(s).
+ *
+ * MT-Level: Safe
+ *
+ * GLIB - Library of useful routines for C programming
+ * Copyright 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
diff --git a/gtree.c b/gtree.c
index 0d7f78c..795f5e3 100644
--- a/gtree.c
+++ b/gtree.c
@@ -1,5 +1,11 @@
-/* GLIB - Library of useful routines for C programming
- * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+/*
+ * gtree.c - balanced binary tree container
+ *
+ * MT-Level: Safe
+ *
+ * GLIB - Library of useful routines for C programming
+ * Copyright 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ * Copyright 1998 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -80,6 +86,7 @@
 
 static GMemChunk *node_mem_chunk = NULL;
 static GSList *node_free_list = NULL;
+G_THREAD_SPROTECT(node_free_list)
 
 
 GTree*
@@ -238,6 +245,8 @@
   GTreeNode *node;
   GSList *tmp_list;
 
+  g_thread_lock(node_free_list);
+
   if (node_free_list)
     {
       tmp_list = node_free_list;
@@ -259,6 +268,8 @@
       node = g_chunk_new (GTreeNode, node_mem_chunk);
     }
 
+  g_thread_unlock(node_free_list);
+
   node->balance = 0;
   node->left = NULL;
   node->right = NULL;
@@ -273,7 +284,10 @@
 {
   if (node)
     {
+      g_thread_lock(node_free_list);
       node_free_list = g_slist_prepend (node_free_list, node);
+      g_thread_unlock(node_free_list);
+
       g_tree_node_destroy (node->right);
       g_tree_node_destroy (node->left);
     }
@@ -379,7 +393,9 @@
 	  node = g_tree_node_restore_right_balance (new_root, old_balance);
 	}
 
+      g_thread_lock(node_free_list);
       node_free_list = g_slist_prepend (node_free_list, garbage);
+      g_thread_unlock(node_free_list);
     }
   else if (cmp < 0)
     {