aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2009-11-04 04:52:18 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2009-11-04 04:52:18 +0000
commitb7c1d2f196fc3557202e41a4abfe117910947400 (patch)
tree0e0fed153e6db63792205e6f269421180c2e1512 /src
parent4d5df10a3e521bbb3918d5844e8521af901b6fdf (diff)
fixed a bug that prohibited query search on IMAP folders. Don't call gtk_main_iteration() from non-main threads.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2330 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/main.c10
-rw-r--r--src/query_search.c10
2 files changed, 17 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index b0013642..5efdcbbe 100644
--- a/src/main.c
+++ b/src/main.c
@@ -113,6 +113,10 @@ static gint lock_socket = -1;
static gint lock_socket_tag = 0;
static GIOChannel *lock_ch = NULL;
+#if USE_THREADS
+static GThread *main_thread;
+#endif
+
static struct RemoteCmd {
gboolean receive;
gboolean receive_all;
@@ -618,6 +622,11 @@ static void thread_leave_func(void)
static void event_loop_iteration_func(void)
{
+ if (g_thread_self() != main_thread) {
+ g_fprintf(stderr, "event_loop_iteration_func called from non-main thread (%p)\n", g_thread_self());
+ g_usleep(10000);
+ return;
+ }
gtk_main_iteration();
}
#endif
@@ -633,6 +642,7 @@ static void app_init(void)
gdk_threads_set_lock_functions(thread_enter_func,
thread_leave_func);
gdk_threads_init();
+ main_thread = g_thread_self();
}
#endif
syl_init();
diff --git a/src/query_search.c b/src/query_search.c
index ff6a31ef..5261b49e 100644
--- a/src/query_search.c
+++ b/src/query_search.c
@@ -571,6 +571,7 @@ typedef struct _QueryData
gint total;
gint flag;
GTimeVal tv_prev;
+ GSList *mlist;
#if USE_THREADS
GAsyncQueue *queue;
guint timer_tag;
@@ -622,8 +623,7 @@ static gpointer query_search_folder_func(gpointer data)
g_async_queue_ref(qdata->queue);
#endif
- mlist = folder_item_get_msg_list(qdata->item, TRUE);
- qdata->total = g_slist_length(mlist);
+ mlist = qdata->mlist;
memset(&fltinfo, 0, sizeof(FilterInfo));
@@ -680,7 +680,6 @@ static gpointer query_search_folder_func(gpointer data)
procheader_header_list_destroy(hlist);
}
- procmsg_msg_list_free(mlist);
#if USE_THREADS
g_async_queue_unref(qdata->queue);
#endif
@@ -724,6 +723,9 @@ static void query_search_folder(FolderItem *item)
procmsg_set_auto_decrypt_message(FALSE);
+ data.mlist = folder_item_get_msg_list(item, TRUE);
+ data.total = g_slist_length(data.mlist);
+
#if USE_THREADS
data.queue = g_async_queue_new();
data.timer_tag = g_timeout_add(PROGRESS_UPDATE_INTERVAL,
@@ -733,6 +735,7 @@ static void query_search_folder(FolderItem *item)
debug_print("query_search_folder: thread started\n");
while (g_atomic_int_get(&data.flag) == 0)
gtk_main_iteration();
+ log_window_flush();
while ((msginfo = g_async_queue_try_pop(data.queue)))
query_search_append_msg(msginfo);
@@ -746,6 +749,7 @@ static void query_search_folder(FolderItem *item)
query_search_folder_func(&data);
#endif
+ procmsg_msg_list_free(data.mlist);
procmsg_set_auto_decrypt_message(TRUE);
g_free(data.folder_name);
}