[svn] gpgme - r1381 - in trunk: . src

svn author marcus cvs at cvs.gnupg.org
Thu Jun 18 15:41:48 CEST 2009


Author: marcus
Date: 2009-06-18 15:41:48 +0200 (Thu, 18 Jun 2009)
New Revision: 1381

Modified:
   trunk/TODO
   trunk/src/ChangeLog
   trunk/src/gpgme.h.in
   trunk/src/w32-io.c
Log:
2009-06-18  Marcus Brinkmann  <marcus at g10code.de>

	* gpgme.h.in (GPGME_CONF_PATHNAME): Remove obsolete macro.

	* w32-io.c (_gpgme_io_pipe): Allocate reader/writer thread right
	away.
	(_gpgme_io_read, _gpgme_io_write, _gpgme_io_select)
	(_gpgme_io_dup): Never allocate threads here.
	(find_writer, find_reader): Check return value of thread creation
	function.


Modified: trunk/src/ChangeLog
===================================================================
--- trunk/src/ChangeLog	2009-06-18 12:38:55 UTC (rev 1380)
+++ trunk/src/ChangeLog	2009-06-18 13:41:48 UTC (rev 1381)
@@ -1,5 +1,14 @@
 2009-06-18  Marcus Brinkmann  <marcus at g10code.de>
 
+	* gpgme.h.in (GPGME_CONF_PATHNAME): Remove obsolete macro.
+
+	* w32-io.c (_gpgme_io_pipe): Allocate reader/writer thread right
+	away.
+	(_gpgme_io_read, _gpgme_io_write, _gpgme_io_select)
+	(_gpgme_io_dup): Never allocate threads here.
+	(find_writer, find_reader): Check return value of thread creation
+	function.
+
 	* context.h (CTX_OP_DATA_MAGIC): New macro.
 	(struct ctx_op_data): New member MAGIC.
 	* op-support.c (_gpgme_op_data_lookup): Initialize magic.

Modified: trunk/TODO
===================================================================
--- trunk/TODO	2009-06-18 12:38:55 UTC (rev 1380)
+++ trunk/TODO	2009-06-18 13:41:48 UTC (rev 1381)
@@ -8,24 +8,20 @@
    we block reading the next line with assuan.
 
 * Before release:
-** Figure out if _gpgme_io_pipe should pre-create reader/writer and if we
-   then can use !start_it in most invocations.  Note that gpgme_io_dup
-   probably should always use !start_it, because currently it will
-   always create reader/writer if they don't exist(!?).
 ** Some gpg tests fail with gpg 1.3.4-cvs (gpg/t-keylist-sig)
    The test is currently disabled there and in gpg/t-import.
 ** When gpg supports it, write binary subpackets directly,
    and parse SUBPACKET status lines.
-** A few months after 1.1.7:
-   Remove GPGME_CONF_PATHNAME macro.
 
 * ABI's to break:
+** Implementation: Remove support for old style error codes in
+   conversion.c::_gpgme_map_gnupg_error.
 ** gpgme_edit_cb_t: Add "processed" return argument
    (see edit.c::command_handler).
 ** I/O and User Data could be made extensible.  But this can be done
    without breaking the ABI hopefully.
-** All enums that should be enums need to have a maximum value to ensure
-   a certain minimum width for extensibility.
+** All enums should be replaced by ints and simple macros for
+   maximum compatibility.
 ** Compatibility interfaces that can be removed in future versions:
 *** gpgme_data_new_from_filepart
 *** gpgme_data_new_from_file
@@ -109,7 +105,7 @@
    the fds unregistered immediately - i think so?)
    Note that we need support in gpgsm to set include-certs to default
    as RESET does not reset it.
-** Optimize the case where a data object has 0an underlying fd we can pass
+** Optimize the case where a data object has an underlying fd we can pass
    directly to the engine.  This will be automatic with socket I/O and
    descriptor passing.
 ** Move code common to all engines up from gpg to engine.

Modified: trunk/src/gpgme.h.in
===================================================================
--- trunk/src/gpgme.h.in	2009-06-18 12:38:55 UTC (rev 1380)
+++ trunk/src/gpgme.h.in	2009-06-18 13:41:48 UTC (rev 1381)
@@ -1793,9 +1793,6 @@
     GPGME_CONF_ALIAS_LIST = 37
   }
 gpgme_conf_type_t;
-/* Macro for backward compatibility (even though it was undocumented
-   and marked as experimental in 1.1.6 - will be removed after 1.1.7): */
-#define GPGME_CONF_PATHNAME GPGME_CONF_FILENAME
 
 
 /* This represents a single argument for a configuration option.

Modified: trunk/src/w32-io.c
===================================================================
--- trunk/src/w32-io.c	2009-06-18 12:38:55 UTC (rev 1380)
+++ trunk/src/w32-io.c	2009-06-18 13:41:48 UTC (rev 1381)
@@ -389,9 +389,12 @@
   if (i != reader_table_size)
     {
       rd = create_reader (fd_to_handle (fd));
-      reader_table[i].fd = fd;
-      reader_table[i].context = rd;
-      reader_table[i].used = 1;
+      if (rd)
+	{
+	  reader_table[i].fd = fd;
+	  reader_table[i].context = rd;
+	  reader_table[i].used = 1;
+	}
     }
 
   UNLOCK (reader_table_lock);
@@ -692,9 +695,12 @@
   if (i != writer_table_size)
     {
       wt = create_writer (fd_to_handle (fd));
-      writer_table[i].fd = fd;
-      writer_table[i].context = wt; 
-      writer_table[i].used = 1;
+      if (wt)
+	{
+	  writer_table[i].fd = fd;
+	  writer_table[i].context = wt; 
+	  writer_table[i].used = 1;
+	}
     }
 
   UNLOCK (writer_table_lock);
@@ -733,7 +739,7 @@
   if (count == 0)
     return TRACE_SYSRES (0);
 
-  ctx = find_writer (fd, 1);
+  ctx = find_writer (fd, 0);
   if (!ctx)
     return TRACE_SYSRES (-1);
 
@@ -826,6 +832,7 @@
   /* Make one end inheritable.  */
   if (inherit_idx == 0)
     {
+      struct writer_context_s *ctx;
       HANDLE hd;
       if (!DuplicateHandle (GetCurrentProcess(), rh,
 			    GetCurrentProcess(), &hd, 0,
@@ -841,6 +848,18 @@
         }
       CloseHandle (rh);
       rh = hd;
+
+      ctx = find_writer (handle_to_fd (wh), 0);
+      assert (ctx == NULL);
+      ctx = find_writer (handle_to_fd (wh), 1);
+      if (!ctx)
+	{
+	  CloseHandle (rh);
+	  CloseHandle (wh);
+	  /* FIXME: Should translate the error code.  */
+	  errno = EIO;
+	  return TRACE_SYSRES (-1);
+	}
     }
   else if (inherit_idx == 1)
     {
@@ -859,6 +878,18 @@
         }
       CloseHandle (wh);
       wh = hd;
+
+      ctx = find_reader (handle_to_fd (rh), 0);
+      assert (ctx == NULL);
+      ctx = find_reader (handle_to_fd (rh), 1);
+      if (!ctx)
+	{
+	  CloseHandle (rh);
+	  CloseHandle (wh);
+	  /* FIXME: Should translate the error code.  */
+	  errno = EIO;
+	  return TRACE_SYSRES (-1);
+	}
     }
   
   filedes[0] = handle_to_fd (rh);
@@ -1248,7 +1279,7 @@
 	{
 	  if (fds[i].for_read)
 	    {
-	      struct reader_context_s *ctx = find_reader (fds[i].fd,1);
+	      struct reader_context_s *ctx = find_reader (fds[i].fd,0);
 	      
 	      if (!ctx)
 		TRACE_LOG1 ("error: no reader for FD 0x%x (ignored)",
@@ -1271,7 +1302,7 @@
             }
 	  else if (fds[i].for_write)
 	    {
-	      struct writer_context_s *ctx = find_writer (fds[i].fd,1);
+	      struct writer_context_s *ctx = find_writer (fds[i].fd,0);
               
 	      if (!ctx)
 		TRACE_LOG1 ("error: no writer for FD 0x%x (ignored)",
@@ -1417,7 +1448,7 @@
       return TRACE_SYSRES (-1);
     }
 
-  rd_ctx = find_reader (fd, 1);
+  rd_ctx = find_reader (fd, 0);
   if (rd_ctx)
     {
       /* No need for locking, as the only races are against the reader
@@ -1436,7 +1467,7 @@
       UNLOCK (reader_table_lock);
     }
 
-  wt_ctx = find_writer (fd, 1);
+  wt_ctx = find_writer (fd, 0);
   if (wt_ctx)
     {
       /* No need for locking, as the only races are against the writer




More information about the Gnupg-commits mailing list