OSDN Git Service

* fhandler_socket.cc (fhandler_socket::connect): Simplify previous
authorcorinna <corinna>
Mon, 2 Jun 2003 21:14:39 +0000 (21:14 +0000)
committercorinna <corinna>
Mon, 2 Jun 2003 21:14:39 +0000 (21:14 +0000)
patch.
(fhandler_socket::accept): Ditto.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_socket.cc

index 484349e..51ff4a6 100644 (file)
@@ -1,5 +1,11 @@
 2003-06-02  Corinna Vinschen  <corinna@vinschen.de>
 
+       * fhandler_socket.cc (fhandler_socket::connect): Simplify previous
+       patch.
+       (fhandler_socket::accept): Ditto.
+
+2003-06-02  Corinna Vinschen  <corinna@vinschen.de>
+
        * fhandler_socket.cc: Include cygthread.h.
        (class sock_event): Remove.
        (thread_connect): New function.
index b2a8ce1..53e4e3b 100644 (file)
@@ -534,21 +534,11 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen)
     {
       sock_thread_data cd = { get_socket (), (sockaddr *) &sin, &namelen, -1 };
       cygthread *thread = new cygthread (connect_thread, &cd, "connect");
-      HANDLE wait_events[2] = { *thread, signal_arrived };
-      if (WaitForMultipleObjects(2, wait_events, FALSE, INFINITE)
-         != WAIT_OBJECT_0)
-       {
-         /* Signal arrived */
-         thread->terminate_thread ();
-         interrupted = TRUE;
-       }
-      else
-       {
-         /* connect returned normally */
-         res = cd.ret;
-         thread->detach ();
-       }
-      delete thread;
+      HANDLE waitevt = CreateEvent(&sec_none_nih, FALSE, TRUE, NULL);
+      interrupted = thread->detach (waitevt);
+      CloseHandle (waitevt);
+      if (!interrupted)
+        res = cd.ret;
     }
   else
     res = ::connect (get_socket (), (sockaddr *) &sin, namelen);
@@ -652,20 +642,12 @@ fhandler_socket::accept (struct sockaddr *peer, int *len)
     {
       sock_thread_data ad = { get_socket (), peer, len, -1 };
       cygthread *thread = new cygthread (accept_thread, &ad, "accept");
-      HANDLE wait_events[2] = { *thread, signal_arrived };
-      if (WaitForMultipleObjects(2, wait_events, FALSE, INFINITE)
-          != WAIT_OBJECT_0)
-        {
-         /* Signal arrived */
-         thread->terminate_thread ();
-         delete thread;
-         set_errno (EINTR);
-         return -1;
-       }
-      /* accept returned normally */
+      HANDLE waitevt = CreateEvent(&sec_none_nih, FALSE, TRUE, NULL);
+      bool signalled = thread->detach (waitevt);
+      CloseHandle (waitevt);
+      if (signalled)
+       return -1;
       res = ad.ret;
-      thread->detach ();
-      delete thread;
     }
   else
     res = ::accept (get_socket (), peer, len);