aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filter/ChangeLog9
-rw-r--r--filter/filter-driver.c33
2 files changed, 20 insertions, 22 deletions
diff --git a/filter/ChangeLog b/filter/ChangeLog
index 37d6e02140..084b7833d4 100644
--- a/filter/ChangeLog
+++ b/filter/ChangeLog
@@ -1,5 +1,14 @@
2000-09-11 Jeffrey Stedfast <fejj@helixcode.com>
+ * filter-driver.c (filter_driver_run): Don't freeze/thaw the
+ default inbox here, let the caller freeze/thaw it. Don't destroy
+ the folders hash table here, it's faster if we wait till the
+ filter-driver is destroyed.
+ (filter_driver_finalise): Destroy the folders hash table here
+ (filter_driver_init): Initialize the folders hash table here
+
+2000-09-11 Jeffrey Stedfast <fejj@helixcode.com>
+
* filtertypes.xml: Changed "Header" to be "Message header" so it's
not quite as confusing (??)
diff --git a/filter/filter-driver.c b/filter/filter-driver.c
index e82c884f6e..257869081d 100644
--- a/filter/filter-driver.c
+++ b/filter/filter-driver.c
@@ -158,6 +158,8 @@ filter_driver_init (FilterDriver *obj)
p->globals = g_hash_table_new (g_str_hash, g_str_equal);
+ p->folders = g_hash_table_new (g_str_hash, g_str_equal);
+
/* Will get set in filter_driver_run */
p->ex = NULL;
}
@@ -172,10 +174,14 @@ free_hash_strings (void *key, void *value, void *data)
static void
filter_driver_finalise (GtkObject *obj)
{
- FilterDriver *d = (FilterDriver *) obj;
- struct _FilterDriverPrivate *p = _PRIVATE (d);
+ FilterDriver *driver = (FilterDriver *) obj;
+ struct _FilterDriverPrivate *p = _PRIVATE (driver);
+
+ /* close all folders that were opened for appending */
+ close_folders (driver);
+ g_hash_table_destroy (p->folders);
- g_hash_table_foreach (p->globals, free_hash_strings, d);
+ g_hash_table_foreach (p->globals, free_hash_strings, driver);
g_hash_table_destroy (p->globals);
gtk_object_unref (GTK_OBJECT (p->eval));
@@ -358,8 +364,7 @@ open_folder (FilterDriver *driver, const char *folder_url)
static void
close_folder (void *key, void *value, void *data)
-{
-
+{
CamelFolder *folder = value;
FilterDriver *driver = data;
struct _FilterDriverPrivate *p = _PRIVATE (driver);
@@ -368,8 +373,8 @@ close_folder (void *key, void *value, void *data)
mail_tool_camel_lock_up ();
camel_folder_sync (folder, FALSE, p->ex);
camel_folder_thaw (folder);
- mail_tool_camel_lock_down ();
camel_object_unref (CAMEL_OBJECT (folder));
+ mail_tool_camel_lock_down ();
}
/* flush/close all folders */
@@ -416,13 +421,6 @@ filter_driver_run (FilterDriver *driver, CamelMimeMessage *message, CamelMessage
p->message = message;
p->info = info;
- /* setup runtime data */
- p->folders = g_hash_table_new (g_str_hash, g_str_equal);
-
- mail_tool_camel_lock_up ();
- camel_folder_freeze (inbox);
- mail_tool_camel_lock_down ();
-
fsearch = g_string_new ("");
faction = g_string_new ("");
@@ -477,15 +475,6 @@ filter_driver_run (FilterDriver *driver, CamelMimeMessage *message, CamelMessage
filtered = TRUE;
}
- /* close all folders that were opened for appending */
- close_folders (driver);
- g_hash_table_destroy (p->folders);
-
- /* thaw the inbox folder */
- mail_tool_camel_lock_up ();
- camel_folder_thaw (inbox);
- mail_tool_camel_lock_down ();
-
/* transfer the exception over to the parents exception */
if (camel_exception_is_set (p->ex))
camel_exception_xfer (ex, p->ex);