static guint thread_manager_signal = 0;
static GIOChannel * io_channel = NULL;
+void delete_imap(Folder *folder, mailimap *imap)
+{
+ chashdatum key;
+ chashdatum value;
+
+ key.data = &folder;
+ key.len = sizeof(folder);
+ value.data = imap;
+ value.len = 0;
+ chash_delete(session_hash, &key, NULL);
+
+ key.data = &imap;
+ key.len = sizeof(imap);
+ chash_delete(courier_workaround_hash, &key, NULL);
+ debug_print("removing mailimap %p\n", imap);
+ mailimap_free(imap);
+}
static gboolean thread_manager_event(GIOChannel * source,
GIOCondition condition,
imap = get_imap(folder);
if (imap) {
- key.data = &folder;
- key.len = sizeof(folder);
- value.data = imap;
- value.len = 0;
- chash_delete(session_hash, &key, NULL);
- mailimap_free(imap);
- debug_print("deleted old imap\n");
+ debug_print("deleting old imap %p\n", imap);
+ delete_imap(folder, imap);
}
imap = mailimap_new(0, NULL);
imap = get_imap(folder);
if (imap) {
- key.data = &folder;
- key.len = sizeof(folder);
- value.data = imap;
- value.len = 0;
- chash_delete(session_hash, &key, NULL);
- mailimap_free(imap);
- debug_print("deleted old imap\n");
+ debug_print("deleting old imap %p\n", imap);
+ delete_imap(folder, imap);
}
imap = mailimap_new(0, NULL);
{
struct connect_param param;
struct connect_result result;
- chashdatum key;
- chashdatum value;
mailimap * imap;
imap = get_imap(folder);
threaded_run(folder, ¶m, &result, disconnect_run);
- key.data = &folder;
- key.len = sizeof(folder);
- value.data = imap;
- value.len = 0;
- chash_delete(session_hash, &key, NULL);
-
- key.data = &imap;
- key.len = sizeof(imap);
- chash_delete(courier_workaround_hash, &key, NULL);
-
- mailimap_free(imap);
+ if (imap == get_imap(folder)) {
+ debug_print("deleting old imap %p\n", imap);
+ delete_imap(folder, imap);
+ } else {
+ debug_print("imap already deleted %p\n", imap);
+ }
debug_print("disconnect ok\n");
}
imap = get_imap(folder);
if (imap) {
- key.data = &folder;
- key.len = sizeof(folder);
- value.data = imap;
- value.len = 0;
- chash_delete(session_hash, &key, NULL);
- mailimap_free(imap);
- debug_print("deleted old imap\n");
+ debug_print("deleting old imap %p\n", imap);
+ delete_imap(folder, imap);
}
imap = mailimap_new(0, NULL);