+ if (new_list->prev)
+ new_list->prev->next = new_list;
+ if (list)
+ list->prev = new_list;
+
+ return new_list;
+}
+
+static inline GSList*
+g_slist_prepend_mempool (MonoMemPool *mp, GSList *list, gpointer data)
+{
+ GSList *new_list;
+
+ new_list = mono_mempool_alloc (mp, sizeof (GSList));
+ new_list->data = data;
+ new_list->next = list;
+
+ return new_list;
+}
+
+static inline GSList*
+g_slist_append_mempool (MonoMemPool *mp, GSList *list, gpointer data)
+{
+ GSList *new_list;
+ GSList *last;
+
+ new_list = mono_mempool_alloc (mp, sizeof (GSList));
+ new_list->data = data;
+ new_list->next = NULL;
+
+ if (list) {
+ last = list;
+ while (last->next)
+ last = last->next;
+ last->next = new_list;
+
+ return list;
+ } else
+ return new_list;
+}
+
+long
+mono_mempool_get_bytes_allocated (void) MONO_INTERNAL;