aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/wait-user.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2008-06-27 16:07:33 +0000
committerMarcus Brinkmann <[email protected]>2008-06-27 16:07:33 +0000
commit695ec56ffbf3cf1cb4722f5fab33dd2bdb43a9af (patch)
tree0292c4e761d3ee380634ac961e687b4d75777377 /gpgme/wait-user.c
parentFix incompatibility with non-recent mingw runtimes. (diff)
downloadgpgme-695ec56ffbf3cf1cb4722f5fab33dd2bdb43a9af.tar.gz
gpgme-695ec56ffbf3cf1cb4722f5fab33dd2bdb43a9af.zip
2008-06-27 Marcus Brinkmann <[email protected]>
* gpgme.texi (Cancellation): Document gpgme_cancel_async. gpgme/ 2008-06-27 Marcus Brinkmann <[email protected]> * context.h: Include "sema.h". (struct gpgme_context): New members lock and canceled. * gpgme.c (gpgme_new): Initialize lock. (gpgme_release): Destroy lock. (gpgme_cancel_async): New function. * op-support.c (_gpgme_op_reset): Reset the canceled flag. * wait-global.c (gpgme_wait): Check cancel flag before processing any I/O callbacks. * wait-private.c (_gpgme_wait_on_condition): Likewise. * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
Diffstat (limited to '')
-rw-r--r--gpgme/wait-user.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gpgme/wait-user.c b/gpgme/wait-user.c
index 605401e9..7fd61a9b 100644
--- a/gpgme/wait-user.c
+++ b/gpgme/wait-user.c
@@ -39,7 +39,7 @@
gpgme_error_t
_gpgme_user_io_cb_handler (void *data, int fd)
{
- gpgme_error_t err;
+ gpgme_error_t err = 0;
struct tag *tag = (struct tag *) data;
gpgme_ctx_t ctx;
@@ -47,7 +47,13 @@ _gpgme_user_io_cb_handler (void *data, int fd)
ctx = tag->ctx;
assert (ctx);
- err = _gpgme_run_io_cb (&ctx->fdt.fds[tag->idx], 0);
+ LOCK (ctx->lock);
+ if (ctx->canceled)
+ err = gpg_error (GPG_ERR_CANCELED);
+ UNLOCK (ctx->lock);
+
+ if (! err)
+ err = _gpgme_run_io_cb (&ctx->fdt.fds[tag->idx], 0);
if (err)
{
unsigned int idx;