[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