--- old-stuff/rhythmdb/rhythmdb.c	2005-12-30 19:20:31.000000000 +1000
+++ new-stuff/rhythmdb/rhythmdb.c	2005-12-30 19:20:31.000000000 +1000
@@ -1598,7 +1598,7 @@
 	}
 }
 
-static gboolean
+gboolean
 rhythmdb_process_events (RhythmDB *db, GTimeVal *timeout)
 {
 	RhythmDBEvent *event;

--- old-stuff/rhythmdb/rhythmdb.h	2005-12-30 19:20:31.000000000 +1000
+++ new-stuff/rhythmdb/rhythmdb.h	2005-12-30 19:20:31.000000000 +1000
@@ -551,6 +551,7 @@
 void		rhythmdb_emit_entry_deleted		(RhythmDB *db, RhythmDBEntry *entry);
 
 gboolean	rhythmdb_is_busy			(RhythmDB *db);
+gboolean 	rhythmdb_process_events 		(RhythmDB *db, GTimeVal *timeout);
 char *		rhythmdb_compute_status_normal		(gint n_songs, glong duration,
 							 GnomeVFSFileSize size);
 RhythmDBEntryType rhythmdb_entry_register_type          (void);

--- old-stuff/rhythmdb/rhythmdb-tree.c	2005-12-30 19:20:31.000000000 +1000
+++ new-stuff/rhythmdb/rhythmdb-tree.c	2005-12-30 19:20:31.000000000 +1000
@@ -208,6 +208,7 @@
 	RhythmDBEntry *entry;
 	GString *buf;
 	RhythmDBPropType propid;
+	gint entry_counter;
 
 	gboolean has_date;
 };
@@ -330,6 +331,14 @@
 			rb_debug ("found entry without location");
 			rhythmdb_entry_unref (RHYTHMDB (ctx->db), ctx->entry);
 		}
+		if (++ctx->entry_counter == 8) {
+			GTimeVal timeout;
+			g_get_current_time (&timeout);
+			g_time_val_add (&timeout, G_USEC_PER_SEC * 0.25);
+			rhythmdb_process_events (RHYTHMDB (ctx->db), &timeout);
+
+			ctx->entry_counter = 0;
+		}
 		ctx->state = RHYTHMDB_TREE_PARSER_STATE_RHYTHMDB;
 		break;
 	}

