Fixed blocking of most operations
[gpg4win.git] / patches / gpgme / 02-w32-io-threads.patch
1 #! /bin/sh
2 patch -p0 -f $* < $0
3 exit $?
4
5 Revert a change that needs more testing.
6
7 diff -rup src/w32-io.c src/w32-io.c
8 --- src/w32-io.c        2009-06-21 00:55:40.000000000 +0200
9 +++ src/w32-io.c        2009-06-21 00:56:01.000000000 +0200
10 @@ -389,12 +389,9 @@ find_reader (int fd, int start_it)
11    if (i != reader_table_size)
12      {
13        rd = create_reader (fd_to_handle (fd));
14 -      if (rd)
15 -       {
16 -         reader_table[i].fd = fd;
17 -         reader_table[i].context = rd;
18 -         reader_table[i].used = 1;
19 -       }
20 +      reader_table[i].fd = fd;
21 +      reader_table[i].context = rd;
22 +      reader_table[i].used = 1;
23      }
24  
25    UNLOCK (reader_table_lock);
26 @@ -695,12 +692,9 @@ find_writer (int fd, int start_it)
27    if (i != writer_table_size)
28      {
29        wt = create_writer (fd_to_handle (fd));
30 -      if (wt)
31 -       {
32 -         writer_table[i].fd = fd;
33 -         writer_table[i].context = wt; 
34 -         writer_table[i].used = 1;
35 -       }
36 +      writer_table[i].fd = fd;
37 +      writer_table[i].context = wt; 
38 +      writer_table[i].used = 1;
39      }
40  
41    UNLOCK (writer_table_lock);
42 @@ -739,7 +733,7 @@ _gpgme_io_write (int fd, const void *buf
43    if (count == 0)
44      return TRACE_SYSRES (0);
45  
46 -  ctx = find_writer (fd, 0);
47 +  ctx = find_writer (fd, 1);
48    if (!ctx)
49      return TRACE_SYSRES (-1);
50  
51 @@ -832,7 +826,6 @@ _gpgme_io_pipe (int filedes[2], int inhe
52    /* Make one end inheritable.  */
53    if (inherit_idx == 0)
54      {
55 -      struct writer_context_s *ctx;
56        HANDLE hd;
57        if (!DuplicateHandle (GetCurrentProcess(), rh,
58                             GetCurrentProcess(), &hd, 0,
59 @@ -848,22 +841,9 @@ _gpgme_io_pipe (int filedes[2], int inhe
60          }
61        CloseHandle (rh);
62        rh = hd;
63 -
64 -      ctx = find_writer (handle_to_fd (wh), 0);
65 -      assert (ctx == NULL);
66 -      ctx = find_writer (handle_to_fd (wh), 1);
67 -      if (!ctx)
68 -       {
69 -         CloseHandle (rh);
70 -         CloseHandle (wh);
71 -         /* FIXME: Should translate the error code.  */
72 -         errno = EIO;
73 -         return TRACE_SYSRES (-1);
74 -       }
75      }
76    else if (inherit_idx == 1)
77      {
78 -      struct reader_context_s *ctx;
79        HANDLE hd;
80        if (!DuplicateHandle( GetCurrentProcess(), wh,
81                             GetCurrentProcess(), &hd, 0,
82 @@ -879,18 +859,6 @@ _gpgme_io_pipe (int filedes[2], int inhe
83          }
84        CloseHandle (wh);
85        wh = hd;
86 -
87 -      ctx = find_reader (handle_to_fd (rh), 0);
88 -      assert (ctx == NULL);
89 -      ctx = find_reader (handle_to_fd (rh), 1);
90 -      if (!ctx)
91 -       {
92 -         CloseHandle (rh);
93 -         CloseHandle (wh);
94 -         /* FIXME: Should translate the error code.  */
95 -         errno = EIO;
96 -         return TRACE_SYSRES (-1);
97 -       }
98      }
99    
100    filedes[0] = handle_to_fd (rh);
101 @@ -1280,7 +1248,7 @@ _gpgme_io_select (struct io_select_fd_s 
102         {
103           if (fds[i].for_read)
104             {
105 -             struct reader_context_s *ctx = find_reader (fds[i].fd,0);
106 +             struct reader_context_s *ctx = find_reader (fds[i].fd,1);
107               
108               if (!ctx)
109                 TRACE_LOG1 ("error: no reader for FD 0x%x (ignored)",
110 @@ -1303,7 +1271,7 @@ _gpgme_io_select (struct io_select_fd_s 
111              }
112           else if (fds[i].for_write)
113             {
114 -             struct writer_context_s *ctx = find_writer (fds[i].fd,0);
115 +             struct writer_context_s *ctx = find_writer (fds[i].fd,1);
116                
117               if (!ctx)
118                 TRACE_LOG1 ("error: no writer for FD 0x%x (ignored)",
119 @@ -1449,7 +1417,7 @@ _gpgme_io_dup (int fd)
120        return TRACE_SYSRES (-1);
121      }
122  
123 -  rd_ctx = find_reader (fd, 0);
124 +  rd_ctx = find_reader (fd, 1);
125    if (rd_ctx)
126      {
127        /* No need for locking, as the only races are against the reader
128 @@ -1468,7 +1436,7 @@ _gpgme_io_dup (int fd)
129        UNLOCK (reader_table_lock);
130      }
131  
132 -  wt_ctx = find_writer (fd, 0);
133 +  wt_ctx = find_writer (fd, 1);
134    if (wt_ctx)
135      {
136        /* No need for locking, as the only races are against the writer