aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/rungpg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpgme/rungpg.c')
-rw-r--r--gpgme/rungpg.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/gpgme/rungpg.c b/gpgme/rungpg.c
index 58c12f92..7cb4ae79 100644
--- a/gpgme/rungpg.c
+++ b/gpgme/rungpg.c
@@ -276,6 +276,30 @@ free_fd_data_map (struct fd_data_map_s *fd_data_map)
}
+static gpgme_error_t
+gpg_cancel (void *engine)
+{
+ engine_gpg_t gpg = engine;
+
+ if (!gpg)
+ return gpg_error (GPG_ERR_INV_VALUE);
+
+ if (gpg->status.fd[0] != -1)
+ _gpgme_io_close (gpg->status.fd[0]);
+ if (gpg->status.fd[1] != -1)
+ _gpgme_io_close (gpg->status.fd[1]);
+ if (gpg->colon.fd[0] != -1)
+ _gpgme_io_close (gpg->colon.fd[0]);
+ if (gpg->colon.fd[1] != -1)
+ _gpgme_io_close (gpg->colon.fd[1]);
+ if (gpg->fd_data_map)
+ free_fd_data_map (gpg->fd_data_map);
+ if (gpg->cmd.fd != -1)
+ _gpgme_io_close (gpg->cmd.fd);
+
+ return 0;
+}
+
static void
gpg_release (void *engine)
{
@@ -284,6 +308,8 @@ gpg_release (void *engine)
if (!gpg)
return;
+ gpg_cancel (engine);
+
while (gpg->arglist)
{
struct arg_and_data_s *next = gpg->arglist->next;
@@ -302,18 +328,6 @@ gpg_release (void *engine)
if (gpg->cmd.keyword)
free (gpg->cmd.keyword);
- if (gpg->status.fd[0] != -1)
- _gpgme_io_close (gpg->status.fd[0]);
- if (gpg->status.fd[1] != -1)
- _gpgme_io_close (gpg->status.fd[1]);
- if (gpg->colon.fd[0] != -1)
- _gpgme_io_close (gpg->colon.fd[0]);
- if (gpg->colon.fd[1] != -1)
- _gpgme_io_close (gpg->colon.fd[1]);
- if (gpg->fd_data_map)
- free_fd_data_map (gpg->fd_data_map);
- if (gpg->cmd.fd != -1)
- _gpgme_io_close (gpg->cmd.fd);
free (gpg);
}
@@ -1665,5 +1679,5 @@ struct engine_ops _gpgme_engine_ops_gpg =
gpg_verify,
gpg_set_io_cbs,
gpg_io_event,
- NULL
+ gpg_cancel
};