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:
parent
9c17b3343b
commit
3ab899f41c
@ -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.
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user