(child_info_fork::retry): New field.
* dcrt0.cc (__api_fatal_exit_val): Define.
(child_info_fork::handle_failure): Define new function.
(__api_fatal): Exit using __api_fatal_exit_val value.
* environ.cc (set_fork_retry): Set fork_retry based on CYGWIN environment
variable.
(parse_thing): Add "fork_retry" setting.
* fork.cc (fork_retry): Define.
(frok::parent): Reorganize to allow retry of failed child creation if child
signalled that it was ok to do so.
* heap.cc (heap_init): Signal parent via handle_failure when VirtualAlloc
fails.
* pinfo.h (EXITCODE_RETRY): Declare.
* sigproc.cc (child_info::sync): Properly exit with failure condition if called
for fork and didn't see subproc_ready.
* spawn.cc (spawn_guts): Use windows pid as first argument.
* winsup.h: Remove obsolete NEW_MACRO_VARARGS define.
(__api_fatal_exit_val): Declare.
(set_api_fatal_return): Define.
(in_dllentry): Declare.
* exceptions.cc (inside_kernel): Remove unneeded in_dllentry declaration.
later. Add a comment.
* fork.cc (resume_child): Make void.
(frok::parent): Only zero pi when necessary. Explicitly zero si. Set
this_errno when child_copy fails. Accommodate change to resume_child.
* sigproc.cc (sigalloc): Move global_sigs initialization here.
(sigproc_init): Move global_sigs.
(sig_send): Just check for flush signals once.
* wincap.h: Define supports_setconsolectrlhandler_null throughout.
* wincap.cc: Ditto.
previously initialized.
* cygtls.h (_cygtls::initialized): Move nearer the end to catch situation when
Windows 98 mysteriously changes pieces of cygtls when thread is detaching.
* gendef (__sigfe_maybe): Simplify slightly.
* tlsoffsets.h: Regenerate.
(CYGTLSMAGIC): Delete.
* dcrt0.cc (dll_crt0_0): Call sigproc_init during init startup.
(_dll_crt0): Don't worry about sync_startup. Just wait for sigthread here.
* dll_init.cc (cygwin_detach_dll): Only pick up tls version of retaddr if we
have a valid tls.
* fork.cc (frok::child): Remove sigproc_init initialization since it happens
much earlier now.
* gendef: Recognize SIGFE_MAYBE.
(fefunc): Generate calls to _sigfe_maybe, if appropriate.
(_sigfe_maybe): New function.
* init.cc (search_for): Always initialize search_for, even on fork.
(calibration_thread): Delete.
(calibration_id): Delete.
(prime_threads): Delete.
(munge_threadfunc): Remove calibration_thread special case. Avoid calling
thread function if we haven't yet hit the "search_for" thread.
(dll_entry): Remove prime_threads call. Only call munge_threadfunc when
hwait_sig is active. Ditto. for _my_tls.remove ();
* sigproc.cc (hwait_sig): Make global.
(sigproc_init): Don't bother with sync_startup.
(sig_send): Treat flush as a no-op when signals are held.
(wait_sig): Cause signals to be held after fork.
(NtOpenDirectoryObject): Define.
(NtQueryDirectoryObject): Define.
* fhandler_proc.cc: Include ctype.h and wchar.h.
(format_proc_partitions): Revamp loop over existing harddisks by
scanning the NT native \Device object directory and looking for
Harddisk entries.
* ntdll.h: Rearrange system call declarations alphabetically.
(DIRECTORY_QUERY): Define.
(struct _DIRECTORY_BASIC_INFORMATION): Define.
(NtOpenDirectoryObject): Declare.
(NtQueryDirectoryObject): Declare.
* dll_init.cc (cygwin_detach_dll): Use new tls function to find return address
since this function is now signal guarded.
(update_envptrs): Remove unneeded braces.
* syscalls.cc (statvfs): Coerce full_path to avoid a gcc warning.
* fhandler_disk_file.cc (fhandler_disk_file::opendir): Move storing
fhandler in file descriptor table to some point very late in function
to avoid double free'ing. Add comment to explain what happens.
Add label free_mounts and don't forget to delete __DIR_mounts structure
if NtOpenFile fails.
dirent_saw_dev and dirent_saw_proc.
(fhandler_cygdrive::open): Declare.
(fhandler_cygdrive::close): Declare.
* fhandler_disk_file.cc (class __DIR_mounts): Move to beginning of file.
(__DIR_mounts::check_mount): New parameter to indicate if inode number
is needed in calling function or not. Add /proc and /cygdrive handling.
(__DIR_mounts::check_missing_mount): Ditto.
(path_conv::ndisk_links): Use __DIR_mounts class to create correct
hardlink count for directories with mount points in them.
(fhandler_disk_file::readdir_helper): Remove /dev, /proc and /cygdrive
handling.
(fhandler_cygdrive::open): New method.
(fhandler_cygdrive::close): New method.
(fhandler_cygdrive::fstat): Always return fixed inode number 2 and
fixed link count of 1. Drop call to set_drives.
(fhandler_cygdrive::opendir): Drop call to get_namehash.
(fhandler_cygdrive::readdir): Handle "." entry to return fixed inode
number 2.
* cygthread.cc (cygthread::callfunc): Revert below change. Make ev a manual
reset event again. so that it will be reset by WaitFor*Object as appropriate.
(cygthread::stub): Ditto.
(cygthread::terminate_thread): Reset ev if it was found to have been set.