diff options
| author | Marcus Brinkmann <[email protected]> | 2009-06-15 17:05:47 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2009-06-15 17:05:47 +0000 | 
| commit | 59eecf421e42cb929794f31e6387dbfb5b6a543b (patch) | |
| tree | 6cd59c2639f6a81fb1a998b871b571a21e23fc27 /src/gpgme.c | |
| parent | Improved W32 SetForegroundWindow hacks. (diff) | |
| download | gpgme-59eecf421e42cb929794f31e6387dbfb5b6a543b.tar.gz gpgme-59eecf421e42cb929794f31e6387dbfb5b6a543b.zip | |
2009-06-15  Marcus Brinkmann  <[email protected]>
	* gpgme.h.in (gpgme_result_ref, gpgme_result_unref): Add
	prototypes.
	* gpgme.def, libgpgme.vers (gpgme_result_ref, gpgme_result_unref):
	Add these.
	* context.h (struct ctx_op_data): Add member "references".
	* gpgme.c (gpgme_result_ref, gpgme_result_unref): New functions.
	(_gpgme_release_result): Use gpgme_result_unref.
	* op-support.c (_gpgme_op_data_lookup): Initialize references.
Diffstat (limited to '')
| -rw-r--r-- | src/gpgme.c | 36 | 
1 files changed, 32 insertions, 4 deletions
| diff --git a/src/gpgme.c b/src/gpgme.c index 203cd711..2372a06a 100644 --- a/src/gpgme.c +++ b/src/gpgme.c @@ -176,6 +176,35 @@ gpgme_release (gpgme_ctx_t ctx)  void +gpgme_result_ref (void *result) +{ +  struct ctx_op_data *data = result - sizeof (struct ctx_op_data); + +  if (! result) +    return; + +  data->references++; +} + + +void +gpgme_result_unref (void *result) +{ +  struct ctx_op_data *data = result - sizeof (struct ctx_op_data); + +  if (! result) +    return; + +  if (--data->references == 0) +    { +      if (data->cleanup) +	(*data->cleanup) (data->hook); +      free (data); +    } +} + + +void  _gpgme_release_result (gpgme_ctx_t ctx)  {    struct ctx_op_data *data = ctx->op_data; @@ -183,9 +212,8 @@ _gpgme_release_result (gpgme_ctx_t ctx)    while (data)      {        struct ctx_op_data *next_data = data->next; -      if (data->cleanup) -	(*data->cleanup) (data->hook); -      free (data); +      data->next = NULL; +      gpgme_result_unref (data->hook);        data = next_data;      }    ctx->op_data = NULL; @@ -430,7 +458,7 @@ gpgme_set_io_cbs (gpgme_ctx_t ctx, gpgme_io_cbs_t io_cbs)  /* This function provides access to the internal read function; it is -   normally not used. */ +   normally not used.  */  ssize_t  gpgme_io_read (int fd, void *buffer, size_t count)  { | 
