Possible fix for NT and segv fix.
authorWerner Koch <wk@gnupg.org>
Thu, 1 Feb 2001 09:25:56 +0000 (09:25 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 1 Feb 2001 09:25:56 +0000 (09:25 +0000)
gpgme/ChangeLog
gpgme/rungpg.c
gpgme/w32-io.c

index 458b3c9..6b63ca2 100644 (file)
@@ -1,6 +1,14 @@
+2001-02-01  Werner Koch  <wk@gnupg.org>
+
+       * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
+       code to all Set/ResetEvent().
+
+       * rungpg.c (read_status): Check for end of stream only if we have
+       an r.  By Timo.
+
 2001-01-31  Werner Koch  <wk@gnupg.org>
 
-       * wait.c (_gpgme_wait_on_condition): Remove all exit code processing.
+       * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
        (propagate_term_results,clear_active_fds): Removed.
        (count_active_fds): Renamed to .. 
        (count_active_and_thawed_fds): .. this and count only thawed fds. 
index 5250b56..36b6f79 100644 (file)
@@ -1016,10 +1016,11 @@ read_status ( GpgObject gpg )
                             gpg->status.fnc ( gpg->status.fnc_value, 
                                               r->code, rest);
                         }
-                    }
-                    if ( r->code == STATUS_END_STREAM ) {
-                        if ( gpg->cmd.used )
-                            _gpgme_freeze_fd ( gpg->cmd.fd );
+                    
+                        if ( r->code == STATUS_END_STREAM ) {
+                            if ( gpg->cmd.used )
+                                _gpgme_freeze_fd ( gpg->cmd.fd );
+                        }
                     }
                 }
                 /* To reuse the buffer for the next line we have to
index 82e8f81..f0d31a0 100644 (file)
@@ -87,7 +87,7 @@ set_synchronize (HANDLE h)
      * way to do it is by duplicating the handle.  Tsss.. */
     if (!DuplicateHandle( GetCurrentProcess(), h,
                           GetCurrentProcess(), &tmp,
-                          SYNCHRONIZE, FALSE, 0 ) ) {
+                          EVENT_MODIFY_STATE|SYNCHRONIZE, FALSE, 0 ) ) {
         DEBUG1 ("** Set SYNCRONIZE failed: ec=%d\n", (int)GetLastError());
     }
     else {
@@ -112,7 +112,8 @@ reader (void *arg)
         /* leave a one byte gap so that we can see wheter it is empty or full*/
         if ((c->writepos + 1) % READBUF_SIZE == c->readpos) { 
             /* wait for space */
-            ResetEvent (c->have_space_ev);
+            if (!ResetEvent (c->have_space_ev) )
+                DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ());
             UNLOCK (c->mutex);
             DEBUG1 ("reader thread %p: waiting for space ...", c->thread_hd );
             WaitForSingleObject (c->have_space_ev, INFINITE);
@@ -149,11 +150,13 @@ reader (void *arg)
       
         LOCK (c->mutex);
         c->writepos = (c->writepos + nread) % READBUF_SIZE;
-        SetEvent (c->have_data_ev);
+        if ( !SetEvent (c->have_data_ev) )
+            DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
         UNLOCK (c->mutex);
     }
     /* indicate that we have an error or eof */
-    SetEvent (c->have_data_ev);
+    if ( !SetEvent (c->have_data_ev) )
+        DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
     DEBUG1 ("reader thread %p ended", c->thread_hd );
 
     return 0;
@@ -288,9 +291,11 @@ _gpgme_io_read ( int fd, void *buffer, size_t count )
     memcpy (buffer, c->buffer+c->readpos, nread);
     c->readpos = (c->readpos + nread) % READBUF_SIZE;
     if (c->readpos == c->writepos && !c->eof) {
-        ResetEvent (c->have_data_ev);
+        if ( !ResetEvent (c->have_data_ev) )
+            DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ());
     }
-    SetEvent (c->have_space_ev);
+    if (!SetEvent (c->have_space_ev))
+        DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
     UNLOCK (c->mutex);
 
     DEBUG2 ("fd %d: got %d bytes\n", fd, nread );