From a8f5d57bb1b9d42a88a8a9346e027721e1b0381c Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Jun 27 2007 18:37:05 +0000 Subject: - Revise patch for GNOME bug #362638 to fix RH bug #245289 (frequent hangs). --- diff --git a/evolution-2.8.1-kill-ethread.patch b/evolution-2.8.1-kill-ethread.patch index 8ae43ed..714ea3b 100644 --- a/evolution-2.8.1-kill-ethread.patch +++ b/evolution-2.8.1-kill-ethread.patch @@ -1,5 +1,5 @@ --- evolution-2.10.2/mail/mail-send-recv.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-send-recv.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-send-recv.c 2007-06-27 14:29:23.000000000 -0400 @@ -725,23 +725,22 @@ receive_get_folder(CamelFilterDriver *d, /* ********************************************************************** */ @@ -83,7 +83,7 @@ receive_done ("", data); } --- evolution-2.10.2/mail/mail-component.c.kill-ethread 2007-05-27 15:55:12.000000000 -0400 -+++ evolution-2.10.2/mail/mail-component.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-component.c 2007-06-27 14:29:23.000000000 -0400 @@ -982,7 +982,7 @@ impl_handleURI (PortableServer_Servant s if (camel_url_get_param(url, "uid") != NULL) { char *curi = em_uri_to_camel(uri); @@ -94,7 +94,7 @@ } else { g_warning("email uri's must include a uid parameter"); --- evolution-2.10.2/mail/mail-ops.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-ops.c 2007-06-06 13:05:53.000000000 -0400 ++++ evolution-2.10.2/mail/mail-ops.c 2007-06-27 14:32:56.000000000 -0400 @@ -75,7 +75,7 @@ /* used for both just filtering a folder + uid's, and for filtering a whole folder */ /* used both for fetching mail, and for filtering mail */ @@ -2143,7 +2143,7 @@ return id; } --- evolution-2.10.2/mail/em-folder-utils.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-folder-utils.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-folder-utils.c 2007-06-27 14:29:23.000000000 -0400 @@ -84,7 +84,7 @@ emfu_is_special_local_folder (const char } @@ -2372,7 +2372,7 @@ return id; } --- evolution-2.10.2/mail/importers/elm-importer.c.kill-ethread 2007-04-09 09:09:26.000000000 -0400 -+++ evolution-2.10.2/mail/importers/elm-importer.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/importers/elm-importer.c 2007-06-27 14:29:23.000000000 -0400 @@ -51,7 +51,7 @@ #define d(x) x @@ -2472,7 +2472,7 @@ return id; } --- evolution-2.10.2/mail/importers/mail-importer.c.kill-ethread 2007-04-09 09:09:26.000000000 -0400 -+++ evolution-2.10.2/mail/importers/mail-importer.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/importers/mail-importer.c 2007-06-27 14:29:23.000000000 -0400 @@ -132,7 +132,7 @@ struct _BonoboObject *mail_importer_fact } @@ -2610,7 +2610,7 @@ struct _import_folders_data { --- evolution-2.10.2/mail/importers/pine-importer.c.kill-ethread 2007-04-09 09:09:26.000000000 -0400 -+++ evolution-2.10.2/mail/importers/pine-importer.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/importers/pine-importer.c 2007-06-27 14:29:23.000000000 -0400 @@ -56,7 +56,7 @@ #define d(x) x @@ -2710,8 +2710,8 @@ return id; } ---- evolution-2.10.2/mail/em-utils.c.kill-ethread 2007-06-06 12:57:49.000000000 -0400 -+++ evolution-2.10.2/mail/em-utils.c 2007-06-06 13:02:25.000000000 -0400 +--- evolution-2.10.2/mail/em-utils.c.kill-ethread 2007-06-27 14:27:36.000000000 -0400 ++++ evolution-2.10.2/mail/em-utils.c 2007-06-27 14:29:23.000000000 -0400 @@ -1915,7 +1915,7 @@ em_utils_in_addressbook(CamelInternetAdd ESource *source = s->data; GList *contacts; @@ -2722,7 +2722,7 @@ d(printf(" checking '%s'\n", e_source_get_uri(source))); --- evolution-2.10.2/mail/mail-vfolder.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-vfolder.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-vfolder.c 2007-06-27 14:29:23.000000000 -0400 @@ -21,7 +21,7 @@ */ @@ -2958,7 +2958,7 @@ from = em_uri_from_camel(cfrom); to = em_uri_from_camel(cto); --- evolution-2.10.2/mail/em-format-html.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-format-html.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-format-html.c 2007-06-27 14:29:23.000000000 -0400 @@ -166,7 +166,7 @@ efh_gtkhtml_destroy(GtkHTML *html, EMFor if (efh->priv->format_timeout_id != 0) { g_source_remove(efh->priv->format_timeout_id); @@ -3084,7 +3084,7 @@ g_object_ref(emf); m->format_source = emfsource; --- evolution-2.10.2/mail/em-folder-properties.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-folder-properties.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-folder-properties.c 2007-06-27 14:29:23.000000000 -0400 @@ -386,7 +386,7 @@ em_folder_properties_show(GtkWindow *par } @@ -3095,7 +3095,7 @@ emfp_dialog_got_folder((char *)uri, folder, NULL); } --- evolution-2.10.2/mail/em-folder-tree.c.kill-ethread 2007-05-28 09:06:42.000000000 -0400 -+++ evolution-2.10.2/mail/em-folder-tree.c 2007-06-06 13:04:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-folder-tree.c 2007-06-27 14:31:44.000000000 -0400 @@ -834,7 +834,7 @@ fail: /* TODO: Merge the drop handling code/menu's into one spot using a popup target for details */ /* Drop handling */ @@ -3333,7 +3333,7 @@ static gboolean --- evolution-2.10.2/mail/em-folder-browser.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-folder-browser.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-folder-browser.c 2007-06-27 14:29:23.000000000 -0400 @@ -838,7 +838,7 @@ get_view_query (ESearchBar *esb) @@ -3436,7 +3436,7 @@ return id; } --- evolution-2.10.2/mail/message-list.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/message-list.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/message-list.c 2007-06-27 14:29:23.000000000 -0400 @@ -1802,7 +1802,7 @@ ml_tree_drag_data_get (ETree *tree, int /* TODO: merge this with the folder tree stuff via empopup targets */ /* Drop handling */ @@ -3714,7 +3714,7 @@ m->search = g_strdup (search); m->hideexpr = g_strdup (hideexpr); --- evolution-2.10.2/mail/em-sync-stream.h.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-sync-stream.h 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-sync-stream.h 2007-06-27 14:29:23.000000000 -0400 @@ -29,41 +29,45 @@ requests are always handled in the main #ifndef EM_SYNC_STREAM_H #define EM_SYNC_STREAM_H @@ -3792,7 +3792,7 @@ #endif /* EM_SYNC_STREAM_H */ --- evolution-2.10.2/mail/em-format-html-print.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-format-html-print.c 2007-06-06 13:04:53.000000000 -0400 ++++ evolution-2.10.2/mail/em-format-html-print.c 2007-06-27 14:32:04.000000000 -0400 @@ -262,7 +262,7 @@ int em_format_html_print_message(EMForma g_object_ref(source); g_object_ref(efhp); @@ -3803,7 +3803,7 @@ return 0; /* damn async ... */ } --- evolution-2.10.2/mail/em-sync-stream.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-sync-stream.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-sync-stream.c 2007-06-27 14:29:23.000000000 -0400 @@ -25,42 +25,17 @@ #include #endif @@ -4230,7 +4230,7 @@ + emss->buffer = g_string_sized_new (size); } --- evolution-2.10.2/mail/em-subscribe-editor.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-subscribe-editor.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-subscribe-editor.c 2007-06-27 14:29:23.000000000 -0400 @@ -175,7 +175,7 @@ sub_unref(EMSubscribe *sub) /* ** Subscribe folder operation **************************************** */ @@ -4447,7 +4447,7 @@ sub_unref(sub); } --- evolution-2.10.2/mail/mail-mt.h.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-mt.h 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-mt.h 2007-06-27 14:29:23.000000000 -0400 @@ -23,47 +23,64 @@ #ifndef _MAIL_MT #define _MAIL_MT @@ -4560,7 +4560,7 @@ /* Note that almost all objects care about the lifecycle of their events, so this cannot be used */ extern MailAsyncEvent *mail_async_event; --- evolution-2.10.2/mail/mail-ops.h.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-ops.h 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-ops.h 2007-06-27 14:29:23.000000000 -0400 @@ -30,13 +30,14 @@ extern "C" { #pragma } #endif /* __cplusplus */ @@ -4602,7 +4602,7 @@ /* and for a store */ int mail_get_store (const char *uri, CamelOperation *op, --- evolution-2.10.2/mail/em-composer-utils.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/em-composer-utils.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/em-composer-utils.c 2007-06-27 14:29:23.000000000 -0400 @@ -534,7 +534,7 @@ em_utils_composer_save_draft_cb (EMsgCom strcmp (account->drafts_folder_uri, default_drafts_folder_uri) != 0) { int id; @@ -4647,7 +4647,7 @@ + mail_get_message (folder, uid, post_reply_to_message, NULL, mail_msg_unordered_push); } --- evolution-2.10.2/mail/mail-folder-cache.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-folder-cache.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-folder-cache.c 2007-06-27 14:29:23.000000000 -0400 @@ -843,15 +843,14 @@ update_folders(CamelStore *store, CamelF @@ -4734,7 +4734,7 @@ LOCK(info_lock); --- evolution-2.10.2/mail/em-folder-view.c.kill-ethread 2007-05-28 01:09:15.000000000 -0400 -+++ evolution-2.10.2/mail/em-folder-view.c 2007-06-06 13:03:17.000000000 -0400 ++++ evolution-2.10.2/mail/em-folder-view.c 2007-06-27 14:30:03.000000000 -0400 @@ -68,6 +68,7 @@ #include @@ -4780,7 +4780,7 @@ e_profile_event_emit("goto.empty", "", 0); g_free(emfv->priv->selected_uid); --- evolution-2.10.2/mail/mail-session.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-session.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-session.c 2007-06-27 14:29:23.000000000 -0400 @@ -35,7 +35,7 @@ #include @@ -5055,7 +5055,7 @@ } } --- evolution-2.10.2/mail/mail-mt.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 -+++ evolution-2.10.2/mail/mail-mt.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/mail/mail-mt.c 2007-06-27 14:29:23.000000000 -0400 @@ -29,8 +29,8 @@ #include #include @@ -5116,7 +5116,7 @@ msg->cancel = camel_operation_new(mail_operation_status, GINT_TO_POINTER(msg->seq)); camel_exception_init(&msg->ex); - msg->priv = g_malloc0(sizeof(*msg->priv)); -+ msg->priv = g_slice_new (MailMsgPrivate); ++ msg->priv = g_slice_new0 (MailMsgPrivate); g_hash_table_insert(mail_msg_active_table, GINT_TO_POINTER(msg->seq), msg); @@ -5139,16 +5139,32 @@ e_activity_handler_operation_finished (activity_handler, activity_id); } -@@ -177,58 +176,84 @@ checkmem(void *p) +@@ -177,58 +176,93 @@ checkmem(void *p) } #endif -void mail_msg_free(void *msg) -+gpointer -+mail_msg_ref (gpointer msg) ++static void ++mail_msg_free (MailMsg *mail_msg) { - struct _mail_msg *m = msg; - int activity_id; ++ /* XXX This function is broken out from mail_msg_unref() ++ * only for the benefit of op_status_exec() below. */ ++ ++ if (mail_msg->cancel != NULL) { ++ camel_operation_mute (mail_msg->cancel); ++ camel_operation_unref (mail_msg->cancel); ++ } ++ ++ camel_exception_clear (&mail_msg->ex); ++ g_slice_free (MailMsgPrivate, mail_msg->priv); ++ g_slice_free1 (mail_msg->info->size, mail_msg); ++} ++ ++gpointer ++mail_msg_ref (gpointer msg) ++{ + MailMsg *mail_msg = msg; + + g_return_val_if_fail (mail_msg != NULL, msg); @@ -5227,18 +5243,13 @@ - if (m->cancel) { - camel_operation_mute(m->cancel); - camel_operation_unref(m->cancel); -+ if (mail_msg->cancel) { -+ camel_operation_mute (mail_msg->cancel); -+ camel_operation_unref (mail_msg->cancel); - } - +- } +- - camel_exception_clear(&m->ex); - /*g_free(m->priv->what);*/ - g_free(m->priv); - g_free(m); -+ camel_exception_clear (&mail_msg->ex); -+ g_slice_free (MailMsgPrivate, mail_msg->priv); -+ g_slice_free1 (mail_msg->info->size, mail_msg); ++ mail_msg_free (mail_msg); if (activity_id != 0) - mail_async_event_emit(mail_async_event, MAIL_ASYNC_GUI, (MailAsyncFunc) end_event_callback, @@ -5250,7 +5261,7 @@ } /* hash table of ops->dialogue of active errors */ -@@ -244,9 +269,10 @@ static void error_response(GtkObject *o, +@@ -244,9 +278,10 @@ static void error_response(GtkObject *o, gtk_widget_destroy((GtkWidget *)o); } @@ -5263,7 +5274,7 @@ char *what; GtkDialog *gd; -@@ -271,27 +297,27 @@ void mail_msg_check_error(void *msg) +@@ -271,27 +306,27 @@ void mail_msg_check_error(void *msg) /* check to see if we have dialogue already running for this operation */ /* we key on the operation pointer, which is at least accurate enough for the operation type, although it could be on a different object. */ @@ -5298,7 +5309,7 @@ MAIL_MT_LOCK(mail_msg_lock); m = g_hash_table_lookup(mail_msg_active_table, GINT_TO_POINTER(msgid)); -@@ -304,13 +330,12 @@ void mail_msg_cancel(unsigned int msgid) +@@ -304,13 +339,12 @@ void mail_msg_cancel(unsigned int msgid) /* waits for a message to be finished processing (freed) @@ -5315,7 +5326,7 @@ MAIL_MT_LOCK(mail_msg_lock); m = g_hash_table_lookup(mail_msg_active_table, GINT_TO_POINTER(msgid)); while (m) { -@@ -347,9 +372,7 @@ int mail_msg_active(unsigned int msgid) +@@ -347,9 +381,7 @@ int mail_msg_active(unsigned int msgid) void mail_msg_wait_all(void) { @@ -5326,7 +5337,7 @@ MAIL_MT_LOCK(mail_msg_lock); while (g_hash_table_size(mail_msg_active_table) > 0) { MAIL_MT_UNLOCK(mail_msg_lock); -@@ -367,294 +390,239 @@ void mail_msg_wait_all(void) +@@ -367,294 +399,239 @@ void mail_msg_wait_all(void) } /* **************************************** */ @@ -5337,10 +5348,10 @@ - GDestroyNotify func; - void *data; -}; +- +-static EDList cancel_hook_list = E_DLIST_INITIALISER(cancel_hook_list); +static GHookList cancel_hook_list; --static EDList cancel_hook_list = E_DLIST_INITIALISER(cancel_hook_list); -- -void *mail_cancel_hook_add(GDestroyNotify func, void *data) +GHook * +mail_cancel_hook_add (GHookFunc func, gpointer data) @@ -5454,10 +5465,12 @@ { - EMsgPort *port = (EMsgPort *)d; - mail_msg_t *m; -- -- while (( m = (mail_msg_t *)e_msgport_get(port))) { + MailMsg *msg; +- while (( m = (mail_msg_t *)e_msgport_get(port))) { ++ g_assert (main_loop_queue != NULL); ++ g_assert (msg_reply_queue != NULL); + -#ifdef MALLOC_CHECK - checkmem(m); - checkmem(m->cancel); @@ -5469,9 +5482,7 @@ - fprintf(log, "%p: Replied to GUI thread (exception `%s'\n", m, - camel_exception_get_description(&m->ex)?camel_exception_get_description(&m->ex):"None"); -#endif -+ g_assert (main_loop_queue != NULL); -+ g_assert (msg_reply_queue != NULL); - +- - if (m->ops->reply_msg) - m->ops->reply_msg(m); - mail_msg_check_error(m); @@ -5632,15 +5643,15 @@ +mail_msg_compare (const MailMsg *msg1, const MailMsg *msg2) { - mail_msg_t *m = (mail_msg_t *)msg; -- ++ gint priority1 = msg1->priority; ++ gint priority2 = msg2->priority; + -#ifdef MALLOC_CHECK - checkmem(m); - checkmem(m->cancel); - checkmem(m->priv); -#endif -+ gint priority1 = msg1->priority; -+ gint priority2 = msg2->priority; - +- - if (m->ops->describe_msg) { - char *text = m->ops->describe_msg(m, FALSE); + if (priority1 == priority2) @@ -5708,14 +5719,14 @@ + (GSourceFunc) mail_msg_idle_cb, NULL); + G_UNLOCK (idle_source_id); +} - -- g_io_channel_unref(mail_gui_channel); -- g_io_channel_unref(mail_gui_reply_channel); ++ +void +mail_msg_unordered_push (gpointer msg) +{ + static GOnce once = G_ONCE_INIT; -+ + +- g_io_channel_unref(mail_gui_channel); +- g_io_channel_unref(mail_gui_reply_channel); + g_once (&once, (GThreadFunc) create_thread_pool, GINT_TO_POINTER (10)); - e_msgport_destroy(mail_gui_port); @@ -5773,15 +5784,15 @@ - e_thread_set_reply_port(mail_thread_new, mail_gui_reply_port); - e_thread_set_queue_limit(mail_thread_new, 10); + static GOnce once = G_ONCE_INIT; ++ ++ g_once (&once, (GThreadFunc) create_thread_pool, GINT_TO_POINTER (1)); - mail_msg_active_table = g_hash_table_new(NULL, NULL); - mail_gui_thread = pthread_self(); -+ g_once (&once, (GThreadFunc) create_thread_pool, GINT_TO_POINTER (1)); - -- mail_async_event = mail_async_event_new(); + g_thread_pool_push ((GThreadPool *) once.retval, msg, NULL); +} -+ + +- mail_async_event = mail_async_event_new(); +gboolean +mail_in_main_thread (void) +{ @@ -5789,7 +5800,7 @@ } /* ********************************************************************** */ -@@ -665,7 +633,8 @@ static pthread_mutex_t status_lock = PTH +@@ -665,7 +642,8 @@ static pthread_mutex_t status_lock = PTH /* ********************************************************************** */ struct _proxy_msg { @@ -5799,7 +5810,7 @@ MailAsyncEvent *ea; mail_async_event_t type; -@@ -679,10 +648,8 @@ struct _proxy_msg { +@@ -679,10 +657,8 @@ struct _proxy_msg { }; static void @@ -5811,7 +5822,7 @@ m->thread = pthread_self(); m->have_thread = TRUE; m->func(m->o, m->event_data, m->data); -@@ -697,16 +664,17 @@ static int +@@ -697,16 +673,17 @@ static int idle_async_event(void *mm) { do_async_event(mm); @@ -5835,7 +5846,7 @@ }; MailAsyncEvent *mail_async_event_new(void) -@@ -723,10 +691,9 @@ int mail_async_event_emit(MailAsyncEvent +@@ -723,10 +700,9 @@ int mail_async_event_emit(MailAsyncEvent { struct _proxy_msg *m; int id; @@ -5847,7 +5858,7 @@ m->func = func; m->o = o; m->event_data = event_data; -@@ -735,7 +702,7 @@ int mail_async_event_emit(MailAsyncEvent +@@ -735,7 +711,7 @@ int mail_async_event_emit(MailAsyncEvent m->type = type; m->have_thread = FALSE; @@ -5856,7 +5867,7 @@ g_mutex_lock(ea->lock); ea->tasks = g_slist_prepend(ea->tasks, m); g_mutex_unlock(ea->lock); -@@ -743,12 +710,12 @@ int mail_async_event_emit(MailAsyncEvent +@@ -743,12 +719,12 @@ int mail_async_event_emit(MailAsyncEvent /* We use an idle function instead of our own message port only because the gui message ports's notification buffer might overflow and deadlock us */ if (type == MAIL_ASYNC_GUI) { @@ -5872,7 +5883,7 @@ return id; } -@@ -762,7 +729,7 @@ int mail_async_event_destroy(MailAsyncEv +@@ -762,7 +738,7 @@ int mail_async_event_destroy(MailAsyncEv g_mutex_lock(ea->lock); while (ea->tasks) { m = ea->tasks->data; @@ -5881,7 +5892,7 @@ if (m->have_thread && pthread_equal(m->thread, thread)) { g_warning("Destroying async event from inside an event, returning EDEADLK"); g_mutex_unlock(ea->lock); -@@ -784,17 +751,18 @@ int mail_async_event_destroy(MailAsyncEv +@@ -784,17 +760,18 @@ int mail_async_event_destroy(MailAsyncEv /* ********************************************************************** */ struct _call_msg { @@ -5903,7 +5914,7 @@ void *p1, *p2, *p3, *p4, *p5; int i1; va_list ap; -@@ -842,45 +810,47 @@ do_call(struct _mail_msg *mm) +@@ -842,45 +819,47 @@ do_call(struct _mail_msg *mm) m->ret = m->func(p1, p2, i1, p3, p4, p5); break; } @@ -5970,7 +5981,7 @@ return ret; } -@@ -889,40 +859,42 @@ void *mail_call_main(mail_call_t type, M +@@ -889,40 +868,42 @@ void *mail_call_main(mail_call_t type, M /* locked via status_lock */ static int busy_state; @@ -6025,7 +6036,7 @@ } MAIL_MT_UNLOCK(status_lock); } -@@ -930,7 +902,7 @@ void mail_disable_stop(void) +@@ -930,7 +911,7 @@ void mail_disable_stop(void) /* ******************************************************************************** */ struct _op_status_msg { @@ -6034,7 +6045,7 @@ struct _CamelOperation *op; char *what; -@@ -938,16 +910,16 @@ struct _op_status_msg { +@@ -938,16 +919,16 @@ struct _op_status_msg { void *data; }; @@ -6056,7 +6067,7 @@ MAIL_MT_LOCK (mail_msg_lock); -@@ -986,8 +958,8 @@ static void do_op_status(struct _mail_ms +@@ -986,8 +967,8 @@ static void do_op_status(struct _mail_ms progress_icon = e_icon_factory_get_icon ("stock_mail-unread", E_ICON_SIZE_MENU); MAIL_MT_UNLOCK (mail_msg_lock); @@ -6067,7 +6078,20 @@ /* uncommenting because message is not very useful for a user, see bug 271734*/ else { what = g_strdup(""); -@@ -1021,18 +993,17 @@ static void do_op_status(struct _mail_ms +@@ -1001,11 +982,7 @@ static void do_op_status(struct _mail_ms + MAIL_MT_LOCK (mail_msg_lock); + if (data->activity_state == 3) { + MAIL_MT_UNLOCK (mail_msg_lock); +- if (msg->cancel) +- camel_operation_unref (msg->cancel); +- camel_exception_clear (&msg->ex); +- g_free (msg->priv); +- g_free (msg); ++ mail_msg_free (msg); + } else { + data->activity_state = 2; + MAIL_MT_UNLOCK (mail_msg_lock); +@@ -1021,18 +998,17 @@ static void do_op_status(struct _mail_ms } static void @@ -6093,7 +6117,7 @@ }; static void -@@ -1042,7 +1013,7 @@ mail_operation_status (struct _CamelOper +@@ -1042,7 +1018,7 @@ mail_operation_status (struct _CamelOper d(printf("got operation statys: %s %d%%\n", what, pc)); @@ -6102,7 +6126,7 @@ m->op = op; m->what = g_strdup(what); switch (pc) { -@@ -1055,7 +1026,7 @@ mail_operation_status (struct _CamelOper +@@ -1055,7 +1031,7 @@ mail_operation_status (struct _CamelOper } m->pc = pc; m->data = data; @@ -6112,7 +6136,7 @@ /* ******************** */ --- evolution-2.10.2/plugins/folder-unsubscribe/folder-unsubscribe.c.kill-ethread 2007-04-09 09:09:11.000000000 -0400 -+++ evolution-2.10.2/plugins/folder-unsubscribe/folder-unsubscribe.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/plugins/folder-unsubscribe/folder-unsubscribe.c 2007-06-27 14:29:23.000000000 -0400 @@ -44,32 +44,30 @@ void org_gnome_mail_folder_unsubscribe ( @@ -6193,7 +6217,7 @@ + mail_msg_unordered_push (unsub); } --- evolution-2.10.2/plugins/mark-all-read/mark-all-read.c.kill-ethread 2007-05-27 14:21:10.000000000 -0400 -+++ evolution-2.10.2/plugins/mark-all-read/mark-all-read.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/plugins/mark-all-read/mark-all-read.c 2007-06-27 14:29:23.000000000 -0400 @@ -44,7 +44,7 @@ org_gnome_mark_all_read (EPlugin *ep, EM return; } @@ -6204,7 +6228,7 @@ static void --- evolution-2.10.2/plugins/exchange-operations/exchange-folder.c.kill-ethread 2007-05-25 02:43:33.000000000 -0400 -+++ evolution-2.10.2/plugins/exchange-operations/exchange-folder.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/plugins/exchange-operations/exchange-folder.c 2007-06-27 14:29:23.000000000 -0400 @@ -140,7 +140,7 @@ org_gnome_exchange_folder_inbox_unsubscr inbox_physical_uri = e_folder_get_physical_uri (inbox); @@ -6215,7 +6239,7 @@ } --- evolution-2.10.2/plugins/save-attachments/save-attachments.c.kill-ethread 2007-04-09 09:09:15.000000000 -0400 -+++ evolution-2.10.2/plugins/save-attachments/save-attachments.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/plugins/save-attachments/save-attachments.c 2007-06-27 14:29:23.000000000 -0400 @@ -407,5 +407,5 @@ org_gnome_save_attachments_save(EPlugin camel_object_ref(data->folder); data->uid = g_strdup(target->uids->pdata[0]); @@ -6224,7 +6248,7 @@ + mail_get_message(data->folder, data->uid, save_got_message, data, mail_msg_unordered_push); } --- evolution-2.10.2/plugins/mailing-list-actions/mailing-list-actions.c.kill-ethread 2007-04-09 09:09:14.000000000 -0400 -+++ evolution-2.10.2/plugins/mailing-list-actions/mailing-list-actions.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/plugins/mailing-list-actions/mailing-list-actions.c 2007-06-27 14:29:23.000000000 -0400 @@ -89,7 +89,7 @@ void emla_list_action (EPlugin *item, EM data->uri = strdup (sel->uri); @@ -6235,7 +6259,7 @@ void emla_list_action_do (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data) --- evolution-2.10.2/plugins/groupwise-features/share-folder-common.c.kill-ethread 2007-04-09 09:09:12.000000000 -0400 -+++ evolution-2.10.2/plugins/groupwise-features/share-folder-common.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/plugins/groupwise-features/share-folder-common.c 2007-06-27 14:29:23.000000000 -0400 @@ -121,7 +121,7 @@ shared_folder_abort (EPlugin *ep, EConfi } @@ -6334,7 +6358,7 @@ return id; } --- evolution-2.10.2/calendar/gui/alarm-notify/alarm-notify.h.kill-ethread 2007-04-09 09:10:29.000000000 -0400 -+++ evolution-2.10.2/calendar/gui/alarm-notify/alarm-notify.h 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/calendar/gui/alarm-notify/alarm-notify.h 2007-06-27 14:29:23.000000000 -0400 @@ -39,19 +39,6 @@ typedef struct _AlarmNotifyClass AlarmNo typedef struct _AlarmNotifyPrivate AlarmNotifyPrivate; @@ -6356,7 +6380,7 @@ BonoboObject object; --- evolution-2.10.2/calendar/gui/alarm-notify/alarm-notify.c.kill-ethread 2007-04-09 09:10:29.000000000 -0400 -+++ evolution-2.10.2/calendar/gui/alarm-notify/alarm-notify.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/calendar/gui/alarm-notify/alarm-notify.c 2007-06-27 14:29:23.000000000 -0400 @@ -45,10 +45,6 @@ struct _AlarmNotifyPrivate { GMutex *mutex; }; @@ -6470,7 +6494,7 @@ static void --- evolution-2.10.2/calendar/gui/alarm-notify/alarm-queue.c.kill-ethread 2007-04-09 09:10:29.000000000 -0400 -+++ evolution-2.10.2/calendar/gui/alarm-notify/alarm-queue.c 2007-06-06 13:02:25.000000000 -0400 ++++ evolution-2.10.2/calendar/gui/alarm-notify/alarm-queue.c 2007-06-27 14:29:23.000000000 -0400 @@ -115,9 +115,6 @@ static int tray_blink_id = -1; static int tray_blink_state = FALSE; static AlarmNotify *an; diff --git a/evolution.spec b/evolution.spec index 9328fe1..17e7285 100644 --- a/evolution.spec +++ b/evolution.spec @@ -47,7 +47,7 @@ Name: evolution Version: 2.10.2 -Release: 2%{?dist} +Release: 3%{?dist} License: GPL Group: Applications/Productivity Summary: GNOME's next-generation groupware suite @@ -747,6 +747,9 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/evolution/%{evo_major}/libmenus.so %changelog +* Wed Jun 27 2007 Matthew Barnes - 2.10.2-3.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #245289 (frequent hangs). + * Wed Jun 06 2007 Matthew Barnes - 2.10.2-2.fc7 - Revise patch for GNOME bug #362638 to fix RH bug #240507 (hang on exit).