diff options
author | Not Zed <NotZed@HelixCode.com> | 2000-12-24 08:46:20 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2000-12-24 08:46:20 +0800 |
commit | 6de256c2a2b23f30d35e4a2213ad5839bf141d06 (patch) | |
tree | a34d8be64c0718070c4e1ea9548282912f37b387 /camel/camel-exception.c | |
parent | 6183d89039ba67a7f3869f460c13aff09a548471 (diff) | |
download | gsoc2013-evolution-6de256c2a2b23f30d35e4a2213ad5839bf141d06.tar.gz gsoc2013-evolution-6de256c2a2b23f30d35e4a2213ad5839bf141d06.tar.zst gsoc2013-evolution-6de256c2a2b23f30d35e4a2213ad5839bf141d06.zip |
Lock the command channel while searching. (imap_body_contains): If
2000-12-24 Not Zed <NotZed@HelixCode.com>
* providers/imap/camel-imap-search.c (imap_body_contains): Lock
the command channel while searching.
(imap_body_contains): If performing a whole uid search, then add
references to our own summary items, dont look it up in the
folder. This way they can't vanish unexpectedly.
* providers/imap/camel-imap-folder.h (CamelImapFolder): Added a
private field.
* providers/imap/camel-imap-private.h: Added lock for imap
searches.
* Merge from camel-mt-branch.
* providers/imap/camel-imap-folder.c (imap_update_summary): Merge
fix, use the folder->summary.
(imap_get_message_flags, imap_set_message_flags,
imap_get_message_user_flag, imap_set_message_user_flag): Removed
again.
(camel_imap_folder_init): Setup private data/lock.
(imap_finalize): Free private data/search lock.
(imap_search_free): Lock the search_lock.
(imap_search_by_expression): Lock the search lock when using the
search object. Also copy/ref hte summary, rather than getting it
directly.
(imap_refresh_info): Free any info lookups. Use folder->summary
not imap_folder->summary. And lock around commands.
svn path=/trunk/; revision=7150
Diffstat (limited to 'camel/camel-exception.c')
-rw-r--r-- | camel/camel-exception.c | 84 |
1 files changed, 46 insertions, 38 deletions
diff --git a/camel/camel-exception.c b/camel/camel-exception.c index ef90136859..6f07183f2b 100644 --- a/camel/camel-exception.c +++ b/camel/camel-exception.c @@ -27,7 +27,21 @@ #include <config.h> #include "camel-exception.h" +/* i dont know why gthread_mutex stuff even exists, this is easier */ +/* also, i'm not convinced mutexes are needed here. But it + doesn't really hurt either */ +#ifdef ENABLE_THREADS +#include <pthread.h> + +static pthread_mutex_t exception_mutex = PTHREAD_MUTEX_INITIALIZER; + +#define CAMEL_EXCEPTION_LOCK(e) (pthread_mutex_lock(&exception_mutex)) +#define CAMEL_EXCEPTION_UNLOCK(e) (pthread_mutex_unlock(&exception_mutex)) +#else +#define CAMEL_EXCEPTION_LOCK(e) +#define CAMEL_EXCEPTION_UNLOCK(e) +#endif /** * camel_exception_new: allocate a new exception object. @@ -83,19 +97,18 @@ camel_exception_init (CamelException *ex) void camel_exception_clear (CamelException *exception) { - if (!exception) return; - - /* free the description text */ + if (!exception) + return; + + CAMEL_EXCEPTION_LOCK(exception); + if (exception->desc) g_free (exception->desc); exception->desc = NULL; - - /* set the Exception Id to NULL */ exception->id = CAMEL_EXCEPTION_NONE; -} - - + CAMEL_EXCEPTION_UNLOCK(exception); +} /** * camel_exception_free: Free an exception @@ -108,12 +121,11 @@ camel_exception_clear (CamelException *exception) void camel_exception_free (CamelException *exception) { - if (!exception) return; + if (!exception) + return; - /* free the description text */ if (exception->desc) g_free (exception->desc); - /* free the exeption itself */ g_free (exception); } @@ -137,17 +149,19 @@ camel_exception_set (CamelException *ex, ExceptionId id, const char *desc) { - /* if no exception is given, do nothing */ - if (!ex) return; + if (!ex) + return; + + CAMEL_EXCEPTION_LOCK(exception); ex->id = id; - /* remove the previous exception description */ if (ex->desc) - g_free (ex->desc); - ex->desc = g_strdup (desc); -} + g_free(ex->desc); + ex->desc = g_strdup(desc); + CAMEL_EXCEPTION_UNLOCK(exception); +} /** * camel_exception_setv: set an exception @@ -178,25 +192,22 @@ camel_exception_setv (CamelException *ex, { va_list args; - /* if no exception is given, do nothing */ - if (!ex) return; + if (!ex) + return; + + CAMEL_EXCEPTION_LOCK(exception); if (ex->desc) g_free (ex->desc); - /* create the temporary exception string */ va_start(args, format); ex->desc = g_strdup_vprintf (format, args); va_end (args); ex->id = id; -} - - - - - + CAMEL_EXCEPTION_UNLOCK(exception); +} /** * camel_exception_xfer: transfer an exception @@ -212,6 +223,8 @@ void camel_exception_xfer (CamelException *ex_dst, CamelException *ex_src) { + CAMEL_EXCEPTION_LOCK(exception); + if (ex_dst->desc) g_free (ex_dst->desc); @@ -220,13 +233,9 @@ camel_exception_xfer (CamelException *ex_dst, ex_src->desc = NULL; ex_src->id = CAMEL_EXCEPTION_NONE; -} - - - - - + CAMEL_EXCEPTION_UNLOCK(exception); +} /** * camel_exception_get_id: get the exception id @@ -246,9 +255,6 @@ camel_exception_get_id (CamelException *ex) return CAMEL_EXCEPTION_NONE; } - - - /** * camel_exception_get_description: get the description of an exception. * @ex: The exception object @@ -262,8 +268,10 @@ camel_exception_get_id (CamelException *ex) const gchar * camel_exception_get_description (CamelException *ex) { + char *ret = NULL; + if (ex) - return ex->desc; - else - return NULL; + ret = ex->desc; + + return ret; } |