]> sourceware.org Git - newlib-cygwin.git/commitdiff
* debug.cc (add_handle): Issue warning on attempts to add the same handle more
authorChristopher Faylor <me@cgf.cx>
Tue, 17 Oct 2000 01:42:04 +0000 (01:42 +0000)
committerChristopher Faylor <me@cgf.cx>
Tue, 17 Oct 2000 01:42:04 +0000 (01:42 +0000)
than once.
* fhandler_tty.cc (fhandler_tty_slave::open): Protect some handles.
(fhandler_tty_common::close): Use proper name when closing handles.
(fhandler_pty_master::close): Don't close to_slave or from_slave since they've
already been closed earlier in the function.
* sigproc.cc (proc_subproc): Don't protect vchild->hProcess.  Expect that the
caller will do this, instead.
* tty.cc (tty_list::terminate): Use proper name when closing handles.
(tty::make_pipes): Protect some handles.

winsup/cygwin/ChangeLog
winsup/cygwin/debug.cc
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/sigproc.cc
winsup/cygwin/tty.cc

index 695ada4a9a2afed23db4925a685efbe5815f1896..19b19f3d9c5f59e7160b876007b4f0396d4eabe2 100644 (file)
@@ -1,3 +1,16 @@
+Mon Oct 16 21:36:57 2000  Christopher Faylor <cgf@cygnus.com>
+
+       * debug.cc (add_handle): Issue warning on attempts to add the same
+       handle more than once.
+       * fhandler_tty.cc (fhandler_tty_slave::open): Protect some handles.
+       (fhandler_tty_common::close): Use proper name when closing handles.
+       (fhandler_pty_master::close): Don't close to_slave or from_slave since
+       they've already been closed earlier in the function.
+       * sigproc.cc (proc_subproc): Don't protect vchild->hProcess.  Expect
+       that the caller will do this, instead.
+       * tty.cc (tty_list::terminate): Use proper name when closing handles.
+       (tty::make_pipes): Protect some handles.
+
 Mon Oct 16 18:37:22 2000  Christopher Faylor <cgf@cygnus.com>
 
        * Makefile.in: Remove some obsolete stuff.
index 8ab767c316cedd99af2aae49e15970d22ddcfdda..e25dc1ca836a87b0407e54a4ca2fae1cc9b05349 100644 (file)
@@ -246,8 +246,14 @@ add_handle (const char *func, int ln, HANDLE h, const char *name)
   handle_list *hl;
   lock_debug ();
 
-  if (find_handle (h))
-    goto out;          /* Already did this once */
+  if ((hl = find_handle (h)))
+    {
+      system_printf ("%s:%d - multiple attempts to add handle %s<%p>", func,
+                    ln, name, h);
+      system_printf (" previously allocated by %s:%d(%s<%p>)",
+                    hl->func, hl->ln, hl->name, hl->h);
+      goto out;                /* Already did this once */
+    }
 
   if ((hl = newh()) == NULL)
     {
index 7a85e1ac50ceda823c8ab07954b1272290168e8a..01a5a9691cf0a6881abcd76072715b4950cb3f6e 100644 (file)
@@ -503,6 +503,7 @@ fhandler_tty_slave::open (const char *, int flags, mode_t)
       return 0;
     }
   set_io_handle (nh);
+  ProtectHandle1 (nh, from_pty);
   termios_printf ("duplicated from_master %p->%p from tty_owner %p",
                  get_ttyp ()->from_master, nh, tty_owner);
   if (!DuplicateHandle (tty_owner, get_ttyp ()->to_master, hMainProc, &nh, 0, TRUE,
@@ -513,6 +514,7 @@ fhandler_tty_slave::open (const char *, int flags, mode_t)
       return 0;
     }
   set_output_handle (nh);
+  ProtectHandle1 (nh, to_pty);
   CloseHandle (tty_owner);
 
   termios_printf("tty%d opened", ttynum);
@@ -886,9 +888,9 @@ fhandler_tty_common::close ()
     termios_printf ("CloseHandle (inuse), %E");
   if (!ForceCloseHandle (output_mutex))
     termios_printf ("CloseHandle (output_mutex<%p>), %E", output_mutex);
-  if (!CloseHandle (get_handle ()))
+  if (!ForceCloseHandle1 (get_handle (), from_pty))
     termios_printf ("CloseHandle (get_handle ()<%p>), %E", get_handle ());
-  if (!CloseHandle (get_output_handle ()))
+  if (!ForceCloseHandle1 (get_output_handle (), to_pty))
     termios_printf ("CloseHandle (get_output_handle ()<%p>), %E", get_output_handle ());
 
   inuse = NULL;
@@ -908,10 +910,12 @@ fhandler_pty_master::close ()
   if (!get_ttyp ()->master_alive ())
     {
       termios_printf ("freeing tty%d (%d)", ttynum, get_ttyp ()->ntty);
+#if 0
       if (get_ttyp ()->to_slave)
-       CloseHandle (get_ttyp ()->to_slave);
+       ForceCloseHandle1 (get_ttyp ()->to_slave, to_slave);
       if (get_ttyp ()->from_slave)
-       CloseHandle (get_ttyp ()->from_slave);
+       ForceCloseHandle1 (get_ttyp ()->from_slave, from_slave);
+#endif
       if (get_ttyp ()->from_master)
        CloseHandle (get_ttyp ()->from_master);
       if (get_ttyp ()->to_master)
@@ -1037,6 +1041,8 @@ fhandler_pty_master::set_close_on_exec (int val)
     {
       get_ttyp ()->from_slave = get_handle ();
       get_ttyp ()->to_slave = get_output_handle ();
+      termios_printf ("from_slave %p, to_slave %p", get_handle (),
+                     get_output_handle ());
     }
 }
 
index 1d381d8bb09876b3bb2be9b6ebd23b855c4e796d..46f8b61080fafa73b829e8d851ff7db9ad8835d1 100644 (file)
@@ -258,7 +258,6 @@ proc_subproc (DWORD what, DWORD val)
 
       pchildren[nchildren] = vchild;
       hchildren[nchildren] = vchild->hProcess;
-      ProtectHandle1 (vchild->hProcess, childhProc);
       if (!DuplicateHandle (hMainProc, vchild->hProcess, hMainProc, &vchild->pid_handle,
                            0, 0, DUPLICATE_SAME_ACCESS))
        system_printf ("Couldn't duplicate child handle for pid %d, %E", vchild->pid);
index f0be2a534bc0e1fca184436cc90eec3d768e7de4..baff0a4c2f6e30a11766d3084263f9a1531ba3da 100644 (file)
@@ -136,8 +136,8 @@ tty_list::terminate (void)
        }
 
       termios_printf ("tty %d master about to finish", ttynum);
-      CloseHandle (t->to_slave);
-      CloseHandle (t->from_slave);
+      ForceCloseHandle1 (t->to_slave, to_pty);
+      ForceCloseHandle1 (t->from_slave, from_pty);
       WaitForSingleObject (tty_master->hThread, INFINITE);
       t->init ();
 
@@ -355,12 +355,14 @@ tty::make_pipes (fhandler_pty_master *ptym)
       return FALSE;
     }
 
+  ProtectHandle1 (to_slave, to_pty);
   if (CreatePipe (&from_slave, &to_master, &sec_all, 0) == FALSE)
     {
       termios_printf ("can't create output pipe");
       set_errno (ENOENT);
       return FALSE;
     }
+  ProtectHandle1 (from_slave, from_pty);
   termios_printf ("tty%d from_slave %p, to_slave %p", ntty, from_slave,
                  to_slave);
   ptym->set_io_handle (from_slave);
This page took 0.039978 seconds and 5 git commands to generate.