CamelIMAPXJob: Add more runtime checks.
authorMatthew Barnes <mbarnes@redhat.com>
Fri, 23 Mar 2012 16:33:48 +0000 (12:33 -0400)
committerMatthew Barnes <mbarnes@redhat.com>
Sun, 25 Mar 2012 22:44:45 +0000 (18:44 -0400)
To help track down a reference counting bug, but good to do anyway.

camel/providers/imapx/camel-imapx-job.c
camel/providers/imapx/camel-imapx-job.h

index e61ed3b..e5b5552 100644 (file)
@@ -74,10 +74,9 @@ camel_imapx_job_ref (CamelIMAPXJob *job)
 {
        CamelIMAPXRealJob *real_job;
 
-       real_job = (CamelIMAPXRealJob *) job;
+       g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), NULL);
 
-       g_return_val_if_fail (real_job != NULL, NULL);
-       g_return_val_if_fail (real_job->ref_count > 0, NULL);
+       real_job = (CamelIMAPXRealJob *) job;
 
        g_atomic_int_inc (&real_job->ref_count);
 
@@ -89,10 +88,9 @@ camel_imapx_job_unref (CamelIMAPXJob *job)
 {
        CamelIMAPXRealJob *real_job;
 
-       real_job = (CamelIMAPXRealJob *) job;
+       g_return_if_fail (CAMEL_IS_IMAPX_JOB (job));
 
-       g_return_if_fail (real_job != NULL);
-       g_return_if_fail (real_job->ref_count > 0);
+       real_job = (CamelIMAPXRealJob *) job;
 
        if (g_atomic_int_dec_and_test (&real_job->ref_count)) {
 
@@ -119,14 +117,24 @@ camel_imapx_job_unref (CamelIMAPXJob *job)
        }
 }
 
+gboolean
+camel_imapx_job_check (CamelIMAPXJob *job)
+{
+       CamelIMAPXRealJob *real_job;
+
+       real_job = (CamelIMAPXRealJob *) job;
+
+       return (real_job != NULL && real_job->ref_count > 0);
+}
+
 void
 camel_imapx_job_wait (CamelIMAPXJob *job)
 {
        CamelIMAPXRealJob *real_job;
 
-       real_job = (CamelIMAPXRealJob *) job;
+       g_return_if_fail (CAMEL_IS_IMAPX_JOB (job));
 
-       g_return_if_fail (real_job != NULL);
+       real_job = (CamelIMAPXRealJob *) job;
 
        g_mutex_lock (real_job->done_mutex);
        while (!real_job->done_flag)
@@ -141,9 +149,9 @@ camel_imapx_job_done (CamelIMAPXJob *job)
 {
        CamelIMAPXRealJob *real_job;
 
-       real_job = (CamelIMAPXRealJob *) job;
+       g_return_if_fail (CAMEL_IS_IMAPX_JOB (job));
 
-       g_return_if_fail (real_job != NULL);
+       real_job = (CamelIMAPXRealJob *) job;
 
        g_mutex_lock (real_job->done_mutex);
        real_job->done_flag = TRUE;
@@ -158,9 +166,9 @@ camel_imapx_job_run (CamelIMAPXJob *job,
 {
        gulong cancel_id = 0;
 
-       g_return_val_if_fail (job != NULL, FALSE);
-       g_return_val_if_fail (job->start != NULL, FALSE);
+       g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
+       g_return_val_if_fail (job->start != NULL, FALSE);
 
        if (g_cancellable_set_error_if_cancelled (job->cancellable, error))
                return FALSE;
@@ -200,7 +208,7 @@ camel_imapx_job_matches (CamelIMAPXJob *job,
        /* XXX CamelFolder can be NULL.  I'm less sure about the
         *     message UID but let's assume that can be NULL too. */
 
-       g_return_val_if_fail (job != NULL, FALSE);
+       g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), FALSE);
 
        if (folder != NULL)
                g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
@@ -216,9 +224,9 @@ camel_imapx_job_get_data (CamelIMAPXJob *job)
 {
        CamelIMAPXRealJob *real_job;
 
-       real_job = (CamelIMAPXRealJob *) job;
+       g_return_val_if_fail (CAMEL_IS_IMAPX_JOB (job), NULL);
 
-       g_return_val_if_fail (real_job != NULL, NULL);
+       real_job = (CamelIMAPXRealJob *) job;
 
        return real_job->data;
 }
@@ -230,9 +238,9 @@ camel_imapx_job_set_data (CamelIMAPXJob *job,
 {
        CamelIMAPXRealJob *real_job;
 
-       real_job = (CamelIMAPXRealJob *) job;
+       g_return_if_fail (CAMEL_IS_IMAPX_JOB (job));
 
-       g_return_if_fail (real_job != NULL);
+       real_job = (CamelIMAPXRealJob *) job;
 
        if (real_job->destroy_data != NULL)
                real_job->destroy_data (real_job->data);
index 69f7bf4..d4eaed0 100644 (file)
@@ -23,6 +23,9 @@
 
 #include "camel-imapx-server.h"
 
+#define CAMEL_IS_IMAPX_JOB(job) \
+       (camel_imapx_job_check (job))
+
 G_BEGIN_DECLS
 
 typedef struct _CamelIMAPXJob CamelIMAPXJob;
@@ -59,6 +62,7 @@ struct _CamelIMAPXJob {
 CamelIMAPXJob *        camel_imapx_job_new             (GCancellable *cancellable);
 CamelIMAPXJob *        camel_imapx_job_ref             (CamelIMAPXJob *job);
 void           camel_imapx_job_unref           (CamelIMAPXJob *job);
+gboolean       camel_imapx_job_check           (CamelIMAPXJob *job);
 void           camel_imapx_job_wait            (CamelIMAPXJob *job);
 void           camel_imapx_job_done            (CamelIMAPXJob *job);
 gboolean       camel_imapx_job_run             (CamelIMAPXJob *job,