OSDN Git Service

* Makefile.in (dtable_CFLAGS): Use -fomit-frame-pointer and -fcheck-new.
authorcgf <cgf>
Mon, 8 Aug 2005 04:06:06 +0000 (04:06 +0000)
committercgf <cgf>
Mon, 8 Aug 2005 04:06:06 +0000 (04:06 +0000)
* cygheap.cc (cmalloc): Only emit system_printf warnings on failure if
DEBUGGING.
(crealloc): Ditto.
(ccalloc): Ditto.
* dtable.cc (build_fh_name): Treat NULL return from cnew as indicative of
EMFILE condition.
(build_fh_dev): Ditto.
(dtable::dup_worker): Handle NULL return from build_fh_pc.
(dtable::vfork_child_dup): Trust dup_worker to set errno.
* fhandler.h (fhandler_base::new): Mark as nothrow.

winsup/cygwin/ChangeLog
winsup/cygwin/Makefile.in
winsup/cygwin/cygheap.cc
winsup/cygwin/dcrt0.cc
winsup/cygwin/dtable.cc
winsup/cygwin/fhandler.h

index ea4b046..ba6e11d 100644 (file)
@@ -1,5 +1,20 @@
 2005-08-07  Christopher Faylor  <cgf@timesys.com>
 
+       * Makefile.in (dtable_CFLAGS): Use -fomit-frame-pointer and
+       -fcheck-new.
+       * cygheap.cc (cmalloc): Only emit system_printf warnings on failure if
+       DEBUGGING.
+       (crealloc): Ditto.
+       (ccalloc): Ditto.
+       * dtable.cc (build_fh_name): Treat NULL return from cnew as indicative
+       of EMFILE condition.
+       (build_fh_dev): Ditto.
+       (dtable::dup_worker): Handle NULL return from build_fh_pc.
+       (dtable::vfork_child_dup): Trust dup_worker to set errno.
+       * fhandler.h (fhandler_base::new): Mark as nothrow.
+
+2005-08-07  Christopher Faylor  <cgf@timesys.com>
+
        * dllfixdbg: New perl script.
        * configure.in: Detect objcopy, objdump, strip.
        * configure: Regenerate.
index ebf5e26..930c00a 100644 (file)
@@ -230,6 +230,7 @@ devices_CFLAGS:=-fomit-frame-pointer -Os
 dir_CFLAGS:=-fomit-frame-pointer
 dlfcn_CFLAGS:=-fomit-frame-pointer
 dll_init_CFLAGS:=-fomit-frame-pointer
+dtable_CFLAGS:=-fomit-frame-pointer -fcheck-new
 fcntl_CFLAGS:=-fomit-frame-pointer
 fhandler_CFLAGS:=-fomit-frame-pointer
 fhandler_clipboard_CFLAGS:=-fomit-frame-pointer
index 9f2f7d4..00f7b07 100644 (file)
@@ -279,8 +279,8 @@ cmalloc (cygheap_types x, DWORD n)
   c = (cygheap_entry *) _cmalloc (sizeof_cygheap (n));
   if (!c)
     {
-      system_printf ("cmalloc returned NULL");
 #ifdef DEBUGGING
+      system_printf ("cmalloc returned NULL");
       try_to_debug ();
 #endif
     }
@@ -298,8 +298,10 @@ crealloc (void *s, DWORD n)
   cygheap_entry *c = tocygheap (s);
   cygheap_types t = (cygheap_types) c->type;
   c = (cygheap_entry *) _crealloc (c, sizeof_cygheap (n));
+#ifdef DEBUGGING
   if (!c)
     system_printf ("crealloc returned NULL");
+#endif
   return creturn (t, c, n);
 }
 
@@ -328,8 +330,10 @@ ccalloc (cygheap_types x, DWORD n, DWORD size)
   c = (cygheap_entry *) _cmalloc (sizeof_cygheap (n));
   if (c)
     memset (c->data, 0, n);
+#ifdef DEBUGGING
   if (!c)
     system_printf ("ccalloc returned NULL");
+#endif
   return creturn (x, c, n);
 }
 
index 9fd9fa8..7cc3ea9 100644 (file)
@@ -725,6 +725,11 @@ dll_crt0_1 (char *)
 
   check_sanity_and_sync (user_data);
   malloc_init ();
+#ifdef CGF
+  int i = 0;
+  while (i)
+    cmalloc (HEAP_STR, 2000000);
+#endif
 
   /* Initialize SIGSEGV handling, etc. */
   init_exceptions (&cygwin_except_entry);
index 3dd540b..4164740 100644 (file)
@@ -342,8 +342,9 @@ build_fh_name (const char *name, HANDLE h, unsigned opt, suffix_info *si)
   if (pc.error)
     {
       fhandler_base *fh = cnew (fhandler_nodevice) ();
-      fh->set_error (pc.error);
-      set_errno (pc.error);
+      if (fh)
+       fh->set_error (pc.error);
+      set_errno (fh ? pc.error : EMFILE);
       return fh;
     }
 
@@ -364,10 +365,11 @@ build_fh_dev (const device& dev, const char *unix_name)
   return build_fh_pc (pc);
 }
 
+#define fh_unset ((fhandler_base *) 1)
 fhandler_base *
 build_fh_pc (path_conv& pc)
 {
-  fhandler_base *fh = NULL;
+  fhandler_base *fh = fh_unset;
 
   switch (pc.dev.major)
     {
@@ -472,9 +474,13 @@ build_fh_pc (path_conv& pc)
     }
 
   if (!fh)
-    fh = cnew (fhandler_nodevice) ();
-
-  fh->set_name (pc);
+    set_errno (EMFILE);
+  else
+    {
+      if (fh == fh_unset)
+       fh = cnew (fhandler_nodevice) ();
+      fh->set_name (pc);
+    }
 
   debug_printf ("fh %p", fh);
   return fh;
@@ -484,18 +490,23 @@ fhandler_base *
 dtable::dup_worker (fhandler_base *oldfh)
 {
   fhandler_base *newfh = build_fh_pc (oldfh->pc);
-  *newfh = *oldfh;
-  newfh->set_io_handle (NULL);
-  if (oldfh->dup (newfh))
+  if (!newfh)
+    debug_printf ("build_fh_pc failed");
+  else
     {
-      cfree (newfh);
-      newfh = NULL;
-      return NULL;
+      *newfh = *oldfh;
+      newfh->set_io_handle (NULL);
+      if (oldfh->dup (newfh))
+       {
+         cfree (newfh);
+         debug_printf ("oldfh->dup failed");
+       }
+      else
+       {
+         newfh->close_on_exec (false);
+         debug_printf ("duped '%s' old %p, new %p", oldfh->get_name (), oldfh->get_io_handle (), newfh->get_io_handle ());
+       }
     }
-
-  newfh->close_on_exec (false);
-  MALLOC_CHECK;
-  debug_printf ("duped '%s' old %p, new %p", oldfh->get_name (), oldfh->get_io_handle (), newfh->get_io_handle ());
   return newfh;
 }
 
@@ -745,7 +756,6 @@ dtable::vfork_child_dup ()
     else
       {
        res = 0;
-       set_errno (EBADF);
        goto out;
       }
 
index 6b698fa..04a80b0 100644 (file)
@@ -301,7 +301,7 @@ class fhandler_base
                                      _off64_t offset, DWORD size,
                                      void *address);
 
-  void *operator new (size_t, void *p) {return p;}
+  void *operator new (size_t, void *p) __attribute__ ((nothrow)) {return p;}
 
   virtual void init (HANDLE, DWORD, mode_t);