* cygserver_ipc.h (ipc_set_proc_info): Use _cygtls::ipc_set_proc_info to set
per-thread signal arrived value.
* cygthread.cc (cygthread::detach): Use per-thread signal_arrived via
set_thread_waiting.
* fork.cc (_cygtls::fixup_after_fork): Clear signal_arrived.
(_cygtls::remove): Close any signal_arrived handle when thread exists.
(_cygtls::find_tls): Remove unneeded function.
* cygtls.h: Update copyright.
(class _cygtls): Reorganize to help avoid rebuilding newlib when structure
changes.
(_cygtls::event): Delete.
(_cygtls::threadkill): Ditto.
(_cygtls::signal_waiting): Declare new bool.
(_cygtls::find_tls): Delete declaration.
(_cygtls::set_threadkill): Ditto.
(_cygtls::reset_threadkill): Ditto.
(_cygtls::set_signal_arrived): Declare new function.
(class set_thread_waiting): Declare new class.
* cygwait.cc (cw_nowait_storage): Define.
(cygwait): Set per-thread signal_arrived via set_thread_waiting. Don't
special-case _main_tls.
* cygwait.h (cw_nowait): Define.
(cw_infinite): Ditto.
(cygwait): Redefine pathological wait-only case.
* dcrt0.cc (dll_crt0_0): Remove call to now-defunct events_init().
(dll_crt0_1): Remove call to now-defunct create_signal_arrived().
* exceptions.cc: Reflect set_signal_mask() argument reordering throughout.
Remove signal mask synchronization throughout.
(events_init): Delete definition.
(mask_sync): Delete now-unneeded mask synchronization.
(set_signal_mask): Reverse order of arguments to "standard" to, from layout.
Rename "newmask" argument to "setmask". Remove debugging.
(sig_handle_tty_stop): Use cancelable_wait rather than WFMO.
(_cygtls::interrupt_setup): Don't treat "threadkill" events specially.
Conditionally set signal_arrived depending on whether the thread has created it
or not.
(sigpacket::process): Reorganize to reflect thread-specific sending of signals
which is more in line with the way it was actually supposed to work.
* fhandler_socket.cc (get_inet_addr): Use cancelable_wait rather than
IsEventSignalled to avoid potential race.
(fhandler_socket::wait_for_events): Set signal_arrived event using
set_thread_waiting().
(fhandler_socket::close): Use cygwait for the case of just waiting 10 ms for a
signal.
* fhandler_tape.cc (fhandler_dev_tape::_lock): Use cancelable_wait rather than
WFMO. Redo switch/case tests accordingly.
* fhandler_termios.cc (fhandler_termios::bg_check): Use cygwait for case of
just waiting 0 ms for a potential signal.
* fhandler_tty.cc (fhandler_pty_master::process_slave_output): Use
cancelable_wait rather than WFSO.
* fhandler_windows.cc (fhandler_windows::read): Set per-thread signal_arrived
via set_thread_waiting().
* flock.cc (lf_setlock): Ditto.
* select.cc (pselect): Ditto. Set per-thread signal_arrived using
set_thread_waiting().
* gendef: Don't special case handling of _cygtls::sig for threads.
* gentls_offsets: Use #pragma once in tlsoffsets.h.
* ntdll.h: Use #pragma once.
* poll.cc: Reflect set_signal_mask() argument reordering.
* posix_ipc.cc (ipc_mutex_lock): Use cancelable_wait rather than WFMO.
(ipc_cond_timedwait): Set perl-thread signal arrived using
set_thread_waiting().
* security.h: Use #pragma once.
* signal.cc (abort): Reflect set_signal_mask() argument reordering.
(clock_nanosleep): Ditto. Change call to cancelable_wait to properly specify
handling of cancel and interrupt.
(sigwaitinfo): Remove handling of per-thread event in favor of per-thread
signal_arrived. Use cancelable_wait rather than WFSO.
* sigproc.cc (signal_arrived): Delete definition.
(create_signal_arrived): Ditto.
* sigproc.h (signal_arrived): Delete declaration.
(set_signal_mask): Avoid defining as a "C" function. Don't conditionally
declare.
(create_signal_arrived): Delete declaration.
* syscalls.cc (rename): Use cygwait() rather than WFSO.
* thread.h (fast_mutex::lock): Use cw_infinite rather than LARGE_NULL.
* wait.cc (wait4): Ditto.
* thread.cc (pthread_mutex::lock): Ditto.
(pthread::join): Ditto.
(semaphore::_wait): Ditto.
(pthread_kill): Remove set_threadkill() accommodation.
* tlsoffsets.h: Regenerate.
Add comment to explain why.
* winsup.h: Include winlean.h from C sources as well.
* libc/minires-os-if.c: Drop including ntdef.h.
Fix previous ChangeLog entry.
as much as possible:
* dtable.cc: Drop including sys/socket.h.
* fhandler_procnet.cc: Change includes accordingly.
* fhandler_socket.cc: Ditto.
(fhandler_socket::listen): Avoid gcc error message initializing sin6.
(LPFN_WSARECVMSG): Only define when building against w32api headers.
* net.cc: Change includes accordingly. Define USE_SYS_TYPES_FD_SET
and __WSA_ERR_MACROS_DEFINED. Define _INC_NETIOAPI temporarily and
explain why.
(struct _IP_ADAPTER_UNICAST_ADDRESS_LH): Only define when building
against w32api headers.
(struct _IP_ADAPTER_ADDRESSES_LH): Ditto.
(SIO_GET_INTERFACE_LIST): Ditto.
(ws_freeaddrinfo): Rename from freeaddrinfo so as not to collide with
Winsock declaration. Change througout.
(ws_getaddrinfo): Ditto.
(ws_getnameinfo): Ditto.
* select.cc: Include netdb.h after defining USE_SYS_TYPES_FD_SET.
* syslog.cc: Drop including netinet/in.h. Define USE_SYS_TYPES_FD_SET
and include ws2tcpip.h.
* include/netdb.h (struct addrinfo): Don't define when building Cygwin.
* include/cygwin/if.h: Don't declare if_xxx functions when building
Cygwin.
* include/cygwin/in.h: Disable most definitions when building Cygwin.
* include/cygwin/socket.h: Disable sockaddr and sockaddr_storage
definitions when building Cygwin. Same for MCAST_INCLUDE/MCAST_EXCLUDE.
* libc/inet_addr.c: Don't define __INSIDE_CYGWIN__ nor
__INSIDE_CYGWIN_NET__.
* libc/inet_network.c: Ditto.
* libc/minires.h: Drop redundant inclusion of netdb.h. Define
__INSIDE_CYGWIN_NET__ only before including netdb.h and resolver
headers.
building against w32api headers.
(RegOpenCurrentUser): Ditto.
* fhandler_tty.cc (GetNamedPipeClientProcessId): Ditto.
* ntdll.h (enum _PROCESSINFOCLASS): Add ProcessImageFileName.
(RtlInitAnsiString): Declare.
(RtlUnicodeStringToAnsiSize): Declare.
* sched.cc (GetForegroundWindow): Ditto.
* sec_helper.cc (SECURITY_NT_NON_UNIQUE): Define as
SECURITY_NT_NON_UNIQUE_RID when building against w32api headers.
(cygsid::get_sid): Use SECURITY_NT_NON_UNIQUE rather than
SECURITY_NT_NON_UNIQUE_RID.
(__sec_user): Use PISECURITY_DESCRIPTOR rather than PSECURITY_DESCRIPTOR
to allow valid pointer arithmetic.
(_recycler_sd): Ditto.
(_everyone_sd): Ditto.
* fhandler_clipboard.cc: Throughout remove handling of eof member.
(fhandler_dev_clipboard::write): Handle EOF condition immediately,
rather than pushing it erroneously to the next read call. Rearrange
code. Fix bug in CF_UNICODETEXT case which potentially dropped single
bytes at the end of the buffer. Add comment.
* strfuncs.cc (sys_cp_wcstombs): Allow returning non-NUL-terminated
buffer if dst != NULL and len == (size_t) -1. Extend leading comment
to explain what's returned in more detail.
why -fomit-frame-pointer doesn't work right for passwd.o and path.o. Add
-static to link command line for cygwin0.dll.
* fhandler_disk_file.cc (fhandler_disk_file::facl): Reorganize slightly to
silence compiler warning when compiling with -fstack-check.
* net.cc (inet_ntop6): Initialize structure members to silence compiler warning
when compiling with -fstack-check.
* pseudo-reloc.cc (_pei386_runtime_relocator): Make this a C function. Detect
NULL u.
* winsup.h (_pei386_runtime_relocator): Declare this as extern "C".
* lib/_cygwin_crt0_common.cc (_pei386_runtime_relocator): Call with NULL
argument.
* signal.cc (sigaction_worker): Eliminate last argument. Let callers report
their own strace info. Regparmize.
(sigaction): Reflect sigaction_worker changes.
(siginterrupt): Ditto.
* exceptions.cc: Update copyright.
* fhandler_tape.cc: Ditto.
* flock.cc (allow_others_to_sync): Use PISECURITY_DESCRIPTOR since
PSECURITY_DESCRIPTOR is supposed to be the opaque type.
* ntdll.h: Remove CreateDisposition flags again, now that they are
defined in Mingw64's ntdef.h. Ditto for Create/Open flags.
* select.cc (allocfd_set): Try to make a little more efficient.
(cygwin_select): Break into two functions to avoid what seems to be a strange
compiler problem with alloca and sel constructor.
(select): New function. Always honor return from call_signal_handler.
(select_stuff::wait): Always honor return from call_signal_handler.
* select.h (select_stuff::select_stuff): Use NULL to initialize pointers rather
than 0.
(ImpersonateNamedPipeClient): Add missing WINAPI.
* ntdll.h (STATUS_INVALID_PARAMETER): Only define if it isn't already.
(STATUS_DLL_NOT_FOUND): Ditto.
(STATUS_ENTRYPOINT_NOT_FOUND): Ditto.
(enum _EVENT_TYPE): Guard against redefinition since it's already
defined in Mingw64's ntdef.h.
(enum _TIMER_TYPE): Ditto.
(enum _SECTION_INHERIT): Define if using Mingw64 headers since it's
missing in Mingw64's ntdef.h.
* winlean.h (__STRALIGN_H_): Define before including windows.h.
(cancelable_wait): Define variant which accepts DWORD time argument.
(cygwait): Use cancelable_wait with DWORD argument.
(cygwait): Use cancelable_wait with DWORD argument and cw_sig_eintr for
timeout-only case.
* exceptions.cc (handle_sigsuspend): Use LARGE_NULL as second argument to
distinguish between cancelable_wait variants.
* thread.cc (pthread_mutex::lock): Ditto.
(pthread::join): Ditto.
(semaphore::_timedwait): Ditto.
* thread.h (fast_mutex::lock): Ditto.
* wait.cc (wait4): Ditto.
* include/machine/elf.h: New header, from FreeBSD.
* include/sys/elf.h: Ditto.
* include/sys/elf32.h: Update from FreeBSD.
* include/sys/elf64.h: Ditto.
* include/sys/elf_common.h: Ditto.
(R_IA64_*): Define Linux-style names as aliases to R_IA_64_*.
(R_SH_*): Define, based on sh-4 psABI.
(R_390_*): Define, based on s390x psABI.
* include/sys/elf_generic.h: Ditto.
* fhandler.h (fhandler_base::refcnt): Delete.
(fhandler_base::inc_refcnt): New function.
(fhandler_base::dec_refcnt): New function.
* cygheap.h (cygheap_fdnew::~cygheap_fdnew): Accommodate split of refcnt to
inc_refcnt/dec_refcnt.
(cygheap_fdget::cygheap_fdget): Ditto.
(cygheap_fdget::~cygheap_fdget::cygheap_fdget): Ditto.
* dtable.cc (dtable::release): Ditto.
(cygwin_attach_handle_to_fd): Ditto.
(dtable::init_std_file_from_handle): Ditto.
(dtable::dup3): On success, return with fdtab locked.
* dtable.h (dtable): Add dup_finish as a friend.
* syscalls.cc (dup_finish): Define new function. Increment refcnt while fdtab
is locked.
(dup2): Use common dup_finish() to perform dup operation.
(dup3): Ditto.
* mount.cc (fs_info::update): Recognize ReFS.
* mount.h (enum fs_info_type): Add refs.
(class fs_info): Add refs flag and accessor methods.
* ntdll.h (RtlAddAccessAllowedAceEx): Declare.
(RtlAddAccessDeniedAceEx): Declare.
* path.h (path_conv::fs_is_refs): Define.
* sec_helper.cc (_recycler_sd): New function to create security
descriptors suitable for the recycler bin starting with Vista.
* security.cc (add_access_allowed_ace): Use RtlAddAccessAllowedAceEx
and drop code to set AceFlags explicitely.
(add_access_denied_ace): Use RtlAddAccessDeniedAceEx and drop code to
set AceFlags explicitely.
* security.h (_recycler_sd): Declare.
(recycler_sd): Define.
* syscalls.cc (desktop_ini): Change formatting.
(desktop_ini_ext): Define third line of recycler desktop.ini file
since Vista,
(try_to_bin): Handle ReFS just like NTFS. Write Vista and later
Recycler in all uppercase, just like shell32 does when recreating it.
Fix comments to include ReFS. Don't implicitely reuse object
attributes from earlier NtOpenFile call, rather recreate it for safety.
Use recycler_sd call when creating security descriptor for Recycler
dirs and files on Vista and later. Write third line of desktop.ini
when on Vista and later.
* select.cc (set_handle_or_return_if_not_open): Remove unneeded final backslash
from definition.
(cygwin_select): Reorganize to incorporate outer retry loop. Move remaining
time recalculation here for retry case. Use select_stuff::wait_states for loop
control.
(select_stuff::cleanup): Avoid unneeded initialization.
(select_stuff::wait): Modify definition to return select_stuff::wait_states.
Eliminate is_cancelable. Don't element 1 of an array if it is a cancel handle.
Remove loop. Rely on being called from enclosing loop in cygwin_select.
Remove time recalculation when restarting. Try harder to always return from
the bottom.
* select.h (select_stuff::wait_state): New enum.
(select_stuff::wait): Modify declaration to return select_stuff::wait_states.
mapped memory. Shorten static library name buffer to MAX_PATH. Use
strlcpy to copy library name to buffer. Only Unmap "map" if it has been
Mapped before.
* pinfo.cc (status_exit): Drop unneeded declaration of
find_first_notloaded_dll in favor of the declaration in winsup.h.
newlib doesn't install cleanup handlers. Explain the problem.
(class __cygwin_lock_handler): New class.
(__cygwin_lock_cleanup): New function.
(__cygwin_lock_lock): Push __cygwin_lock_cleanup thread cleanup
handler.
(__cygwin_lock_trylock): Ditto.
(__cygwin_lock_unlock): Pop thread cleanup handler.
(pthread::pop_cleanup_handler): Temporarily allow cleanup function to
destroy cleanup handler so we can pop in another function than we
pushed in.
to PTHREAD_CANCEL_DISABLE from here...
(pthread::pop_all_cleanup_handlers): ...to here, otherwise any explicit
call to pthread_cleanup_pop disables cancellation for this thread.
* devices.cc: Regenerate.
* dtable.cc (fh_alloc): Don't forget FH_KMEM.
* fhandler_mem.cc (fhandler_dev_mem::open): Set errno to EACCES rather
than ENOENT on systems not granting access to physical memory from
user space.
* child_info.h (child_info_spawn::parent_winpid): Declare new field.
(child_info_spawn::get_parent_handle): Declare new function.
* dcrt0.cc (child_info_spawn::get_parent_handle): Define new function.
(child_info_spawn::handle_spawn): Recreate parent handle if possible when
dynamically loaded. Don't mess with parent handle if it's NULL.
* spawn.cc (child_info_spawn::worker): Set parent_winpid appropriately.
* fhandler.h (PIPE_ADD_PID): Redefine to something we actually DON'T use.
* pipe.cc (fhandler_pipe::create): Avoid clearing all open_mode bits when
checking for PIPE_ADD_PID. Properly keep track of len so that passed in name
is not overwritten.
* pinfo.cc (pinfo::init): Reuse shared memory if the state is marked with
PID_REAPED.
* spawn.cc (child_info_spawn::worker): Don't duplicate myself_pinfo into
non-cygwin child.
* fork.cc (frok::parent): Improve error output.
* cygheap.h (init_cygheap::pid_handle): Delete.
* dcrt0.cc (child_info_spawn::handle_spawn): Keep parent open if we have
execed.
* pinfo.cc (pinfo::thisproc): Remove pid_handle manipulations.
(pinfo::init): Don't consider a reaped process to be available.
* spawn.cc (child_info_spawn::worker): Remove pid_handle manipulations. Make
wr_proc_pipe and parent noninheritable when starting a program which doesn't
use the Cygwin DLL. Conditionally reset wr_proc_pipe to inheritable if
CreateProcess fails. Inject wr_proc_pipe handle into non-Cygwin process.
Consider a non-cygwin process to be 'synced'.
* fhandler_tty.cc (bytes_available): Revert to previous Oct-2011 behavior where
a dummy buffer is used to determine how many bytes will be read.
(fhandler_pty_master::ioctl): Correct coercion in assignment.
systems. Change comment acordingly.
* wincap.h (wincaps::has_gaa_largeaddress_bug): New element.
* wincap.cc: Implement above element throughout.
(wincap_8): New globale wincaps to support Windows 8.
(wincapc::init): Take Windows 8 into account. Set new
has_gaa_largeaddress_bug member to false on 32 bit systems.
* sigproc.cc (proc_terminate): Don't set parent pid of child to 1 if we've
execed since the execed process is still considered the parent.
* child_info.h: Bump copyright.
* pipe.cc (fhandler_pipe::create): Don't indiscriminately add process id to
every pipe since some pipe names (fifo, tty) don't need it.
* sigproc.cc (sigproc_init): Pass PIPE_ADD_PID to fhandler_pipe::create to
ensure that pid is always part of sigwait pipe name.
* globals.cc (pipe_byte): Declare.
* pipe.cc (fhandler_pipe::create): Use current process id in pipe name rather
than pid for simple name collision avoidance. Do this only once to avoid extra
overhead when a busy pipe is found. Honor pipe_byte to create non-message
pipes if set.
* sigproc.cc (sigproc_init): Use a specific name for the signal pipe.
on-disk device and we were stating it.
* path.cc (path_conv::check): Set PATH_KEPT_HANDLE.
* path.h (path_types): Add PATH_KEPT_HANDLE.
(path_conv::kept_handle): Implement.
* dtable.cc (dtable::fixup_after_exec): Specifically reject releasing
nohandle() type fhandlers rather than relying on contents of io_handle.
(dtable::fixup_after_fork): Ditto.
* fhandler_termios.cc: Add includes necessary for definitions of have_execed
and have_execed_cygwin.
(fhandler_termios::sigflush): Don't flush console input when we've started a
non-Cygwin process.
* devices.in (exists_console): Use fhandler_console::exists () rather than raw
test.
* devices.cc: Regenerate.
* fhandler.h (fhandler_console::exists): Define new function.
* fhandler_console.cc (fhandler_console::need_invisible): Use
fhandler_console::exists () rather than raw test.
* spawn.cc: Rename assitant to assistant throughout.
(child_info_spawn::worker): Simplify test for when to start a non-Cygwin
process in its own process group. Just do it whenever we start a non-Cygwin
process.
ENOENT if non-existent file got opened for reading only. Explain why.
* path.cc (path_conv::check): Stick to ENOENT if file has been opened
for informational purposes only. Add to comment.
(getpass): Rework to use /dev/tty in the first place. Install
_getpass_close_fd as pthread cleanup handler. Flush prompt explicitely.
Lock input and switch off signal input handling when reading password.
(dev_on_fs): Set bit size.
(is_dev_resident): Define new method.
* devices.in: Use different method for labelling requested name for dev
storage: prefix it with a ='. Use an actual ':' to denote an internal device.
(exists_console): Avoid repeated test.
(exists_ntdev_silent): Rename from the less-descriptive exists_ntdevs.
(dev_dev_storage): Delete unneeded define.
* gendevices: Add a flag to each line denoting whether the device lives in /dev
space.
(generate): Handle special ":" case here for internal devices. Parse
=something_dev as requiring a storage location. Tack the rest of the line back
onto the reformulated "$rest".
* devices.cc: Regenerate.
* fhandler_dev.cc (fhandler_dev::readdir): Set st_ino to device number.
* syscalls.cc (fhandler_base::stat_fixup): Ditto. Fix link count for
CD-ROM devices. Fix typo in comment.
fhandler_base::set_ino_and_dev.
* syscalls.cc (fhandler_base::stat_fixup): Ditto. Accommodate name
change throughout. Fixup link count of console devices.