Changeset 3646
- Timestamp:
- 05/06/08 18:36:22
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/Makefile.am (modified) (1 diff)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-command.c (modified) (5 diffs)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-folder.c (modified) (3 diffs)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r3645 r3646 11 11 Protect PR_Reads and writes to avoid calls to PR_Close before one of 12 12 them. Should avoid some crashes and bad memory accesses. 13 14 * libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.[ch]: 15 Now references to current_folder, old_folder and last_folder 16 are weak references. This way, when they're finalized we 17 properly remove the store reference to them. 18 Removed some small leaks and compilation warnings. 19 20 * libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store-priv.h: 21 Added. Includes internal declarations of weak reference handlers 22 for folders in the imap store. 23 24 * libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-command.c, 25 libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-folder.c: 26 Use weak references to folders in accesses to store. 13 27 14 28 2008-04-30 Philip Van Hoof <pvanhoof@gnome.org> trunk/libtinymail-camel/camel-lite/camel/providers/imap/Makefile.am
r3442 r3646 34 34 camel-imap-search.h \ 35 35 camel-imap-store.h \ 36 camel-imap-store-priv.h \ 36 37 camel-imap-store-summary.h \ 37 38 camel-imap-summary.h \ trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-command.c
r3483 r3646 46 46 #include "camel-imap-store-summary.h" 47 47 #include "camel-imap-store.h" 48 #include "camel-imap-store-priv.h" 48 49 #include "camel-imap-utils.h" 49 50 #include "camel-imap-summary.h" … … 136 137 camel_object_unref(store->current_folder); */ 137 138 138 if (!folder) 139 if (!folder) { 139 140 store->last_folder = store->current_folder; 140 else { 141 if (store->last_folder) 142 camel_object_hook_event (store->last_folder, "finalize", 143 _camel_imap_store_last_folder_finalize, store); 144 } else { 141 145 modseq = camel_imap_folder_get_highestmodseq (CAMEL_IMAP_FOLDER (folder)); 146 if (store->last_folder) 147 camel_object_unhook_event (store->last_folder, "finalize", 148 _camel_imap_store_last_folder_finalize, store); 142 149 store->last_folder = NULL; 143 150 } 144 151 152 if (store->current_folder) 153 camel_object_unhook_event (store->current_folder, "finalize", 154 _camel_imap_store_current_folder_finalize, store); 145 155 store->current_folder = folder; 146 156 if (store->current_folder) 157 camel_object_hook_event (store->current_folder, "finalize", 158 _camel_imap_store_current_folder_finalize, store); 159 147 160 if (modseq && (store->capabilities & IMAP_CAPABILITY_QRESYNC)) 148 161 { … … 286 299 if (!store->current_folder) { 287 300 store->current_folder = store->last_folder; 301 if (store->current_folder) 302 camel_object_hook_event (store->current_folder, "finalize", 303 _camel_imap_store_current_folder_finalize, store); 288 304 wasnull = TRUE; 289 305 } 290 306 camel_imap_store_stop_idle (store); 291 if (wasnull) 292 store->current_folder = NULL; 307 if (wasnull) { 308 if (store->current_folder) { 309 camel_object_unhook_event (store->current_folder, "finalize", 310 _camel_imap_store_current_folder_finalize, store); 311 store->current_folder = NULL; 312 } 313 } 293 314 } 294 315 … … 1284 1305 start = *p ? p + 1 : p; 1285 1306 } 1286 1307 1287 1308 g_ptr_array_free (args, TRUE); 1288 1309 1289 1310 return out; 1290 1311 } … … 1295 1316 va_list ap; 1296 1317 char *result; 1297 1318 1298 1319 va_start (ap, fmt); 1299 1320 result = imap_command_strdup_vprintf (store, fmt, ap); 1300 1321 va_end (ap); 1301 1322 1302 1323 return result; 1303 1324 } trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-folder.c
r3586 r3646 90 90 #include "camel-imap-search.h" 91 91 #include "camel-imap-store.h" 92 #include "camel-imap-store-priv.h" 92 93 #include "camel-imap-summary.h" 93 94 #include "camel-imap-utils.h" … … 799 800 } 800 801 801 if (store->current_folder == (CamelFolder*) object) 802 if (store->current_folder == (CamelFolder*) object) { 803 camel_object_unhook_event (store->current_folder, "finalize", 804 _camel_imap_store_current_folder_finalize, store); 802 805 store->current_folder = NULL; 806 } 803 807 804 808 if (imap_folder->search) … … 3827 3831 break; 3828 3832 } 3833 camel_exception_clear (&ex); 3829 3834 if (resp) 3830 3835 g_free (resp); trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.c
r3565 r3646 71 71 #include "camel-imap-store-summary.h" 72 72 #include "camel-imap-store.h" 73 #include "camel-imap-store-priv.h" 73 74 #include "camel-imap-summary.h" 74 75 #include "camel-imap-utils.h" … … 322 323 camel_imap_response_free (imap_store, response2); 323 324 } 325 camel_exception_clear (&nex); 324 326 camel_imap_store_start_idle (imap_store); 325 327 } … … 395 397 396 398 let_idle_die (imap_store, TRUE); 399 400 if (imap_store->current_folder) { 401 camel_object_unhook_event (imap_store->current_folder, "finalize", 402 _camel_imap_store_current_folder_finalize, imap_store); 403 imap_store->current_folder = NULL; 404 } 405 406 if (imap_store->old_folder) { 407 camel_object_unhook_event (imap_store->old_folder, "finalize", 408 _camel_imap_store_old_folder_finalize, imap_store); 409 imap_store->old_folder = NULL; 410 } 397 411 398 412 /* This frees current_folder, folders, authtypes, streams, and namespace. */ … … 902 916 CamelStream *tcp_stream; 903 917 CamelSockOptData sockopt; 904 gboolean force_imap4 = FALSE , ssl_ena = FALSE;918 gboolean force_imap4 = FALSE; 905 919 gboolean clean_quit = TRUE; 906 920 char *buf; … … 2122 2136 camel_object_unref (store->current_folder); */ 2123 2137 store->old_folder = store->current_folder; 2138 if (store->old_folder) 2139 camel_object_hook_event (store->old_folder, "finalize", 2140 _camel_imap_store_old_folder_finalize, store); 2141 if (store->current_folder) 2142 camel_object_unhook_event (store->current_folder, "finalize", 2143 _camel_imap_store_current_folder_finalize, store); 2124 2144 store->current_folder = NULL; 2125 2145 … … 2630 2650 if (imap_store->current_folder) { 2631 2651 /* camel_object_unref (imap_store->current_folder); */ 2652 camel_object_unhook_event (imap_store->current_folder, "finalize", 2653 _camel_imap_store_current_folder_finalize, imap_store); 2632 2654 imap_store->current_folder = NULL; 2633 2655 } … … 2807 2829 2808 2830 imap_store->current_folder = new_folder; 2831 camel_object_hook_event (imap_store, "finalize", 2832 _camel_imap_store_current_folder_finalize, imap_store); 2809 2833 /* camel_object_ref (new_folder); */ 2810 2834 camel_exception_init (&local_ex); … … 2814 2838 camel_exception_xfer (ex, &local_ex); 2815 2839 /* camel_object_unref (imap_store->current_folder); */ 2840 camel_object_unhook_event (imap_store, "finalize", 2841 _camel_imap_store_current_folder_finalize, imap_store); 2816 2842 imap_store->current_folder = NULL; 2817 2843 camel_object_unref (new_folder); … … 2882 2908 2883 2909 /* no need to actually create a CamelFolder for INBOX */ 2910 camel_object_unhook_event (imap_store->current_folder, "finalize", 2911 _camel_imap_store_current_folder_finalize, imap_store); 2884 2912 imap_store->current_folder = NULL; 2885 2913 … … 3047 3075 g_mkdir (newpath, S_IRWXU); 3048 3076 3049 while ( file = g_dir_read_name (dir)) {3077 while ((file = g_dir_read_name (dir)) != NULL) { 3050 3078 gchar *old_fullname; 3051 3079 gchar *new_fullname; … … 3106 3134 camel_object_unref (imap_store->current_folder); */ 3107 3135 /* no need to actually create a CamelFolder for INBOX */ 3136 camel_object_unhook_event (imap_store->current_folder, "finalize", 3137 _camel_imap_store_current_folder_finalize, imap_store); 3108 3138 imap_store->current_folder = NULL; 3109 3139 … … 4455 4485 return nread; 4456 4486 } 4487 4488 void 4489 _camel_imap_store_current_folder_finalize (CamelObject *stream, gpointer event_data, gpointer user_data) 4490 { 4491 CamelImapStore *store = (CamelImapStore *) user_data; 4492 4493 store->current_folder = NULL; 4494 } 4495 void 4496 _camel_imap_store_old_folder_finalize (CamelObject *stream, gpointer event_data, gpointer user_data) 4497 { 4498 CamelImapStore *store = (CamelImapStore *) user_data; 4499 4500 store->old_folder = NULL; 4501 } 4502 4503 void 4504 _camel_imap_store_last_folder_finalize (CamelObject *stream, gpointer event_data, gpointer user_data) 4505 { 4506 CamelImapStore *store = (CamelImapStore *) user_data; 4507 4508 store->last_folder = NULL; 4509 }
