OSDN Git Service

* pipe.cc (fhandler_pipe::create): Avoid derefencing a NULL pointer.
authorcgf <cgf>
Wed, 23 Nov 2011 21:58:42 +0000 (21:58 +0000)
committercgf <cgf>
Wed, 23 Nov 2011 21:58:42 +0000 (21:58 +0000)
* child_info.h (child_info): Reorganize some elements so that the ones which
are initialized in a constructor are all together.
* sigproc.cc (child_info::child_info): Initialize values via the constructor
rather than as C statements and make sure that flags is set to zero initially.
* spawn.cc (child_info_spawn::worker): Use iscygwin() test for determining when
to send strace info since it is more foolproof than checking the suspend state.

winsup/cygwin/ChangeLog
winsup/cygwin/child_info.h
winsup/cygwin/pipe.cc
winsup/cygwin/sigproc.cc
winsup/cygwin/spawn.cc

index 6cc089d..95ba756 100644 (file)
@@ -1,5 +1,19 @@
 2011-11-23  Christopher Faylor  <me.cygwin2011@cgf.cx>
 
+       * pipe.cc (fhandler_pipe::create): Avoid derefencing a NULL pointer.
+
+       * child_info.h (child_info): Reorganize some elements so that the ones
+       which are initialized in a constructor are all together.
+       * sigproc.cc (child_info::child_info): Initialize values via the
+       constructor rather than as C statements and make sure that flags is set
+       to zero initially.
+
+       * spawn.cc (child_info_spawn::worker): Use iscygwin() test for
+       determining when to send strace info since it is more foolproof than
+       checking the suspend state.
+
+2011-11-23  Christopher Faylor  <me.cygwin2011@cgf.cx>
+
        * fhandler.h (fhandler_pipe::create): Rename from the misnamed
        "create_selectable".  Change return to DWORD.
        (fhandler_pty_common::pipesize): New constant.
index d69d441..91cf3c5 100644 (file)
@@ -57,15 +57,15 @@ public:
   DWORD intro;         // improbable string
   unsigned long magic; // magic number unique to child_info
   unsigned short type; // type of record, exec, spawn, fork
+  init_cygheap *cygheap;
+  void *cygheap_max;
+  unsigned char flag;
+  int retry;           // number of times we've tried to start child process
   HANDLE subproc_ready;        // used for synchronization with parent
   HANDLE user_h;
   HANDLE parent;
-  init_cygheap *cygheap;
-  void *cygheap_max;
   DWORD cygheap_reserve_sz;
-  unsigned char flag;
   unsigned fhandler_union_cb;
-  int retry;           // number of times we've tried to start child process
   DWORD exit_code;     // process exit code
   static int retry_count;// retry count;
   child_info (unsigned, child_info_types, bool);
index 60b59ff..11ba794 100644 (file)
@@ -264,14 +264,14 @@ fhandler_pipe::create (LPSECURITY_ATTRIBUTES sa_ptr, PHANDLE r, PHANDLE w,
          /* The pipe is already open with compatible parameters.
             Pick a new name and retry.  */
          debug_printf ("pipe busy", !name ? ", retrying" : "");
-         if (!*name)
+         if (!name)
            *r = NULL;
          break;
        case ERROR_ACCESS_DENIED:
          /* The pipe is already open with incompatible parameters.
             Pick a new name and retry.  */
          debug_printf ("pipe access denied%s", !name ? ", retrying" : "");
-         if (!*name)
+         if (!name)
            *r = NULL;
          break;
        default:
index 43b3293..bbfed1f 100644 (file)
@@ -761,10 +761,11 @@ int child_info::retry_count = 10;
 /* Initialize some of the memory block passed to child processes
    by fork/spawn/exec. */
 child_info::child_info (unsigned in_cb, child_info_types chtype,
-                       bool need_subproc_ready)
+                       bool need_subproc_ready):
+  cb (in_cb), intro (PROC_MAGIC_GENERIC), magic (CHILD_INFO_MAGIC),
+  type (chtype), cygheap (::cygheap), cygheap_max (::cygheap_max),
+  flag (0), retry (child_info::retry_count)
 {
-  cb = in_cb;
-
   /* It appears that when running under WOW64 on Vista 64, the first DWORD
      value in the datastructure lpReserved2 is pointing to (msv_count in
      Cygwin), has to reflect the size of that datastructure as used in the
@@ -790,9 +791,6 @@ child_info::child_info (unsigned in_cb, child_info_types chtype,
      datastructure. */
   msv_count = wincap.needs_count_in_si_lpres2 () ? in_cb / 5 : 0;
 
-  intro = PROC_MAGIC_GENERIC;
-  magic = CHILD_INFO_MAGIC;
-  type = chtype;
   fhandler_union_cb = sizeof (fhandler_union);
   user_h = cygwin_user_h;
   if (strace.attached ())
@@ -803,9 +801,6 @@ child_info::child_info (unsigned in_cb, child_info_types chtype,
       flag |= _CI_ISCYGWIN;
     }
   sigproc_printf ("subproc_ready %p", subproc_ready);
-  cygheap = ::cygheap;
-  cygheap_max = ::cygheap_max;
-  retry = child_info::retry_count;
   /* Create an inheritable handle to pass to the child process.  This will
      allow the child to duplicate handles from the parent to itself. */
   parent = NULL;
index 25072a8..4e93b18 100644 (file)
@@ -692,7 +692,7 @@ loop:
       goto out;
     }
 
-  if (!(c_flags & CREATE_SUSPENDED))
+  if (iscygwin ())
     strace.write_childpid (*this, pi.dwProcessId);
 
   /* Fixup the parent data structures if needed and resume the child's