diff options
author | Marcus Brinkmann <[email protected]> | 2008-06-27 16:07:33 +0000 |
---|---|---|
committer | Marcus Brinkmann <[email protected]> | 2008-06-27 16:07:33 +0000 |
commit | 695ec56ffbf3cf1cb4722f5fab33dd2bdb43a9af (patch) | |
tree | 0292c4e761d3ee380634ac961e687b4d75777377 /gpgme/wait-user.c | |
parent | Fix incompatibility with non-recent mingw runtimes. (diff) | |
download | gpgme-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.c | 10 |
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; |