[svn] gpgme - r1330 - trunk/gpgme
svn author marcus
cvs at cvs.gnupg.org
Mon Aug 11 19:23:47 CEST 2008
Author: marcus
Date: 2008-08-11 19:23:45 +0200 (Mon, 11 Aug 2008)
New Revision: 1330
Modified:
trunk/gpgme/ChangeLog
trunk/gpgme/gpgme.c
trunk/gpgme/gpgme.h
trunk/gpgme/ops.h
trunk/gpgme/rungpg.c
trunk/gpgme/wait-global.c
trunk/gpgme/wait-private.c
trunk/gpgme/wait-user.c
Log:
2008-08-11 Marcus Brinkmann <marcus at g10code.com>
* rungpg.c (gpg_cancel): Remove cmd fd before status fd.
* gpgme.c (_gpgme_cancel_with_err): New function.
(gpgme_cancel): Reimplement in terms of _gpgme_cancel_with_err.
* wait-private.c (_gpgme_wait_on_condition): Use
_gpgme_cancel_with_err.
* wait-user.c (_gpgme_user_io_cb_handler): Likewise.
* wait-global.c (_gpgme_wait_global_event_cb, gpgme_wait): Likewise.
Modified: trunk/gpgme/ChangeLog
===================================================================
--- trunk/gpgme/ChangeLog 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/ChangeLog 2008-08-11 17:23:45 UTC (rev 1330)
@@ -1,3 +1,13 @@
+2008-08-11 Marcus Brinkmann <marcus at g10code.com>
+
+ * rungpg.c (gpg_cancel): Remove cmd fd before status fd.
+ * gpgme.c (_gpgme_cancel_with_err): New function.
+ (gpgme_cancel): Reimplement in terms of _gpgme_cancel_with_err.
+ * wait-private.c (_gpgme_wait_on_condition): Use
+ _gpgme_cancel_with_err.
+ * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
+ * wait-global.c (_gpgme_wait_global_event_cb, gpgme_wait): Likewise.
+
2008-08-08 Marcus Brinkmann <marcus at g10code.com>
* rungpg.c (command_handler): Remove I/O callback on error, too.
Modified: trunk/gpgme/gpgme.c
===================================================================
--- trunk/gpgme/gpgme.c 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/gpgme.c 2008-08-11 17:23:45 UTC (rev 1330)
@@ -106,24 +106,31 @@
}
-/* Cancel a pending asynchronous operation. */
gpgme_error_t
-gpgme_cancel (gpgme_ctx_t ctx)
+_gpgme_cancel_with_err (gpgme_ctx_t ctx, gpg_error_t ctx_err)
{
gpgme_error_t err;
- TRACE_BEG (DEBUG_CTX, "gpgme_cancel", ctx);
+ TRACE_BEG1 (DEBUG_CTX, "_gpgme_cancel_with_err", ctx, "ctx_err=%i",
+ ctx_err);
err = _gpgme_engine_cancel (ctx->engine);
if (err)
return TRACE_ERR (err);
- err = gpg_error (GPG_ERR_CANCELED);
- _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
+ _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &ctx_err);
return TRACE_ERR (0);
}
+/* Cancel a pending asynchronous operation. */
+gpgme_error_t
+gpgme_cancel (gpgme_ctx_t ctx)
+{
+ return _gpgme_cancel_with_err (ctx, gpg_error (GPG_ERR_CANCELED));
+}
+
+
/* Cancel a pending operation asynchronously. */
gpgme_error_t
gpgme_cancel_async (gpgme_ctx_t ctx)
Modified: trunk/gpgme/gpgme.h
===================================================================
--- trunk/gpgme/gpgme.h 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/gpgme.h 2008-08-11 17:23:45 UTC (rev 1330)
@@ -72,7 +72,7 @@
AM_PATH_GPGME macro) check that this header matches the installed
library. Warning: Do not edit the next line. configure will do
that for you! */
-#define GPGME_VERSION "1.1.7-svn1326"
+#define GPGME_VERSION "1.1.7-svn1329"
Modified: trunk/gpgme/ops.h
===================================================================
--- trunk/gpgme/ops.h 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/ops.h 2008-08-11 17:23:45 UTC (rev 1330)
@@ -27,6 +27,8 @@
/* From gpgme.c. */
+gpgme_error_t _gpgme_cancel_with_err (gpgme_ctx_t ctx, gpg_error_t ctx_err);
+
void _gpgme_release_result (gpgme_ctx_t ctx);
Modified: trunk/gpgme/rungpg.c
===================================================================
--- trunk/gpgme/rungpg.c 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/rungpg.c 2008-08-11 17:23:45 UTC (rev 1330)
@@ -340,6 +340,17 @@
if (!gpg)
return gpg_error (GPG_ERR_INV_VALUE);
+ /* If gpg may be waiting for a cmd, close the cmd fd first. On
+ Windows, close operations block on the reader/writer thread. */
+ if (gpg->cmd.used)
+ {
+ if (gpg->cmd.fd != -1)
+ _gpgme_io_close (gpg->cmd.fd);
+ else if (gpg->fd_data_map
+ && gpg->fd_data_map[gpg->cmd.idx].fd != -1)
+ _gpgme_io_close (gpg->fd_data_map[gpg->cmd.idx].fd);
+ }
+
if (gpg->status.fd[0] != -1)
_gpgme_io_close (gpg->status.fd[0]);
if (gpg->status.fd[1] != -1)
@@ -353,8 +364,6 @@
free_fd_data_map (gpg->fd_data_map);
gpg->fd_data_map = NULL;
}
- if (gpg->cmd.fd != -1)
- _gpgme_io_close (gpg->cmd.fd);
return 0;
}
Modified: trunk/gpgme/wait-global.c
===================================================================
--- trunk/gpgme/wait-global.c 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/wait-global.c 2008-08-11 17:23:45 UTC (rev 1330)
@@ -200,16 +200,9 @@
gpgme_error_t err = ctx_active (ctx);
if (err)
- {
- /* An error occured. Close all fds in this context, and
- send the error in a done event. */
- unsigned int idx;
-
- for (idx = 0; idx <= ctx->fdt.size; idx++)
- if (ctx->fdt.fds[idx].fd != -1)
- _gpgme_io_close (ctx->fdt.fds[idx].fd);
- _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
- }
+ /* An error occured. Close all fds in this context, and
+ send the error in a done event. */
+ _gpgme_cancel_with_err (ctx, &err);
}
break;
@@ -321,13 +314,7 @@
{
/* An error occured. Close all fds in this context,
and signal it. */
- unsigned int idx;
-
- for (idx = 0; idx < ictx->fdt.size; idx++)
- if (ictx->fdt.fds[idx].fd != -1)
- _gpgme_io_close (ictx->fdt.fds[idx].fd);
- _gpgme_engine_io_event (ictx->engine, GPGME_EVENT_DONE,
- &err);
+ _gpgme_cancel_with_err (ictx, err);
/* Break out of the loop, and retry the select()
from scratch, because now all fds should be
Modified: trunk/gpgme/wait-private.c
===================================================================
--- trunk/gpgme/wait-private.c 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/wait-private.c 2008-08-11 17:23:45 UTC (rev 1330)
@@ -89,10 +89,7 @@
unsigned int idx;
err = gpg_error_from_errno (errno);
- for (idx = 0; idx < ctx->fdt.size; idx++)
- if (ctx->fdt.fds[idx].fd != -1)
- _gpgme_io_close (ctx->fdt.fds[idx].fd);
- _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
+ _gpgme_cancel_with_err (ctx, err);
return err;
}
@@ -116,12 +113,8 @@
{
/* An error occured. Close all fds in this context,
and signal it. */
- unsigned int idx;
-
- for (idx = 0; idx < ctx->fdt.size; idx++)
- if (ctx->fdt.fds[idx].fd != -1)
- _gpgme_io_close (ctx->fdt.fds[idx].fd);
- _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
+ _gpgme_cancel_with_err (ctx, err);
+
return err;
}
}
Modified: trunk/gpgme/wait-user.c
===================================================================
--- trunk/gpgme/wait-user.c 2008-08-08 17:53:22 UTC (rev 1329)
+++ trunk/gpgme/wait-user.c 2008-08-11 17:23:45 UTC (rev 1330)
@@ -55,14 +55,7 @@
if (! err)
err = _gpgme_run_io_cb (&ctx->fdt.fds[tag->idx], 0);
if (err)
- {
- unsigned int idx;
-
- for (idx = 0; idx < ctx->fdt.size; idx++)
- if (ctx->fdt.fds[idx].fd != -1)
- _gpgme_io_close (ctx->fdt.fds[idx].fd);
- _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
- }
+ _gpgme_cancel_with_err (ctx, err);
else
{
unsigned int i;
More information about the Gnupg-commits
mailing list