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.
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
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
}
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);
}
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);
}
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);
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;
}
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)
{
}
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;
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;
}
else
{
res = 0;
- set_errno (EBADF);
goto out;
}
_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);