2009-06-18 Marcus Brinkmann <marcus@g10code.de>

* 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.
This commit is contained in:
Marcus Brinkmann 2009-06-18 12:38:55 +00:00
parent 9c17b3343b
commit 3ab899f41c
4 changed files with 18 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2009-06-18 Marcus Brinkmann <marcus@g10code.de>
* 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 <marcus@g10code.de> 2009-06-16 Marcus Brinkmann <marcus@g10code.de>
* gpgme.c (gpgme_result_unref): Hot fix to release a lock. * gpgme.c (gpgme_result_unref): Hot fix to release a lock.

View File

@ -42,8 +42,14 @@ typedef enum
} ctx_op_data_id_t; } ctx_op_data_id_t;
/* "gpgmeres" in ASCII. */
#define CTX_OP_DATA_MAGIC 0x736572656d677067ULL
struct ctx_op_data 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 /* The next element in the linked list, or NULL if this is the last
element. Used by op data structures linked into a context. */ element. Used by op data structures linked into a context. */
struct ctx_op_data *next; struct ctx_op_data *next;

View File

@ -189,6 +189,8 @@ gpgme_result_ref (void *result)
data = result - sizeof (struct ctx_op_data); data = result - sizeof (struct ctx_op_data);
assert (data->magic == CTX_OP_DATA_MAGIC);
LOCK (result_ref_lock); LOCK (result_ref_lock);
data->references++; data->references++;
UNLOCK (result_ref_lock); UNLOCK (result_ref_lock);
@ -205,6 +207,8 @@ gpgme_result_unref (void *result)
data = result - sizeof (struct ctx_op_data); data = result - sizeof (struct ctx_op_data);
assert (data->magic == CTX_OP_DATA_MAGIC);
LOCK (result_ref_lock); LOCK (result_ref_lock);
if (--data->references) if (--data->references)
{ {

View File

@ -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); data = calloc (1, sizeof (struct ctx_op_data) + size);
if (!data) if (!data)
return gpg_error_from_errno (errno); return gpg_error_from_errno (errno);
data->magic = CTX_OP_DATA_MAGIC;
data->next = ctx->op_data; data->next = ctx->op_data;
data->type = type; data->type = type;
data->cleanup = cleanup; data->cleanup = cleanup;