aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2009-06-18 12:38:55 +0000
committerMarcus Brinkmann <[email protected]>2009-06-18 12:38:55 +0000
commit3ab899f41cda31ab763da9e73e95981dcf3d5b7f (patch)
tree369e57cd17d364b54ced5a89dc813b6bddac6823
parent2009-06-16 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-3ab899f41cda31ab763da9e73e95981dcf3d5b7f.tar.gz
gpgme-3ab899f41cda31ab763da9e73e95981dcf3d5b7f.zip
2009-06-18 Marcus Brinkmann <[email protected]>
* context.h (CTX_OP_DATA_MAGIC): New macro. (struct ctx_op_data): New member MAGIC. * op-support.c (_gpgme_op_data_lookup): Initialize magic. * gpgme.c (gpgme_result_unref, gpgme_result_ref): Check magic.
-rw-r--r--src/ChangeLog7
-rw-r--r--src/context.h6
-rw-r--r--src/gpgme.c4
-rw-r--r--src/op-support.c1
4 files changed, 18 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index d7b4592e..95b5f2db 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2009-06-18 Marcus Brinkmann <[email protected]>
+
+ * context.h (CTX_OP_DATA_MAGIC): New macro.
+ (struct ctx_op_data): New member MAGIC.
+ * op-support.c (_gpgme_op_data_lookup): Initialize magic.
+ * gpgme.c (gpgme_result_unref, gpgme_result_ref): Check magic.
+
2009-06-16 Marcus Brinkmann <[email protected]>
* gpgme.c (gpgme_result_unref): Hot fix to release a lock.
diff --git a/src/context.h b/src/context.h
index 63af1d10..e98e7bea 100644
--- a/src/context.h
+++ b/src/context.h
@@ -42,8 +42,14 @@ typedef enum
} ctx_op_data_id_t;
+/* "gpgmeres" in ASCII. */
+#define CTX_OP_DATA_MAGIC 0x736572656d677067ULL
struct ctx_op_data
{
+ /* A magic word just to make sure people don't deallocate something
+ that ain't a result structure. */
+ unsigned long long magic;
+
/* The next element in the linked list, or NULL if this is the last
element. Used by op data structures linked into a context. */
struct ctx_op_data *next;
diff --git a/src/gpgme.c b/src/gpgme.c
index 3283b342..56caf59c 100644
--- a/src/gpgme.c
+++ b/src/gpgme.c
@@ -189,6 +189,8 @@ gpgme_result_ref (void *result)
data = result - sizeof (struct ctx_op_data);
+ assert (data->magic == CTX_OP_DATA_MAGIC);
+
LOCK (result_ref_lock);
data->references++;
UNLOCK (result_ref_lock);
@@ -205,6 +207,8 @@ gpgme_result_unref (void *result)
data = result - sizeof (struct ctx_op_data);
+ assert (data->magic == CTX_OP_DATA_MAGIC);
+
LOCK (result_ref_lock);
if (--data->references)
{
diff --git a/src/op-support.c b/src/op-support.c
index 19b24205..c3ba7785 100644
--- a/src/op-support.c
+++ b/src/op-support.c
@@ -48,6 +48,7 @@ _gpgme_op_data_lookup (gpgme_ctx_t ctx, ctx_op_data_id_t type, void **hook,
data = calloc (1, sizeof (struct ctx_op_data) + size);
if (!data)
return gpg_error_from_errno (errno);
+ data->magic = CTX_OP_DATA_MAGIC;
data->next = ctx->op_data;
data->type = type;
data->cleanup = cleanup;