summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin
Commit message (Collapse)AuthorAgeFilesLines
...
* Recognize Netapp mode supporting reparse pointsCorinna Vinschen2017-03-271-0/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cygwin: Do not generate surrogate chars on netappCorinna Vinschen2017-03-241-1/+1
| | | | | | | Just like Samba, Netapp FSes seem to dislike invalid surrogate usage in filenames. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Document cygserver changesCorinna Vinschen2017-03-241-0/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* dlfcn: Remove stray debug outputnewlib-snapshot-20170323Corinna Vinschen2017-03-222-2/+0
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Rename <sys/_locale.h> to <xlocale.h>Yaakov Selkowitz2017-03-221-1/+1
| | | | | | | | | The locale_t type is provided by <xlocale.h> on Linux, FreeBSD, and Darwin. While, like on some of those systems, it is automatically included by <locale.h> with the proper feature test macros, its presence under this particular name is still presumed in real-world software. Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
* Cygwin: dlfcn: Fix reference countingCorinna Vinschen2017-03-213-34/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The original dll_init code was living under the wrong assumption that dll_dllcrt0_1 and in turn dll_list::alloc will be called for each LoadLibrary call. The same wrong assumption was made for cygwin_detach_dll/dll_list::detach called via FreeLibrary. In reality, dll_dllcrt0_1 gets only called once at first LoadLibrary and cygwin_detach_dll once at last FreeLibrary. In effect, reference counting for DLLs was completely broken after fork: parent: l1 = dlopen ("lib1"); // LoadLibrary, LoadCount = 1 l2 = dlopen ("lib1"); // LoadLibrary, LoadCount = 2 fork (); // LoadLibrary in the child, LoadCount = 1! child: dlclose (l1); // FreeLibrary actually frees the lib x = dlsym (l2); // SEGV * Move reference counting to dlopen/dlclose since only those functions have to keep track of loading/unloading DLLs in the application context. * Remove broken accounting code from dll_list::alloc and dll_list::detach. * Fix error handling in dlclose. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add release message for commit 973f766f6Corinna Vinschen2017-03-141-0/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Revert "Add release message for commit 973f766f6"Corinna Vinschen2017-03-142-6/+12
| | | | | | This reverts commit 125852d77b65fe2155d0d5fa97e53fc9e2b29984. Accidentally commited too much.
* Add release message for commit 973f766f6Corinna Vinschen2017-03-142-12/+6
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Extend 2.8.0 release textCorinna Vinschen2017-03-121-0/+5
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Implement fhandler_dev_null::write to workaround a problem with NULCorinna Vinschen2017-03-122-0/+11
| | | | | | | | Windows NUL device returns only the lower 32 bit of the number of bytes written. Implement a fake write function to ignore the underlying NUL device. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Return value from write is ssize_t, not intCorinna Vinschen2017-03-121-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* getrandom: it's MIN, not MAXYaakov Selkowitz2017-03-112-1/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Belatedly bump Cygwin DLL version to 2.8.0Corinna Vinschen2017-03-102-2/+5
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Drop now unused child_info_fork::from_mainCorinna Vinschen2017-03-101-2/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* fork: Don't copy _main_tls->local_clib from *_impure_ptrCorinna Vinschen2017-03-101-7/+2
| | | | | | | | | | | So far we copy *_impure_ptr into _main_tls->local_clib if the child process has been forked from a pthread. But that's not required. The local_clib area of the new thread is on the stack and the stack gets copied from the parent anyway (in frok::parent). So we only have to make sure _main_tls is pointing to the right address and do the simple post-fork thread init. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* _dll_crt0: Drop incorrect check for being started from parent main threadCorinna Vinschen2017-03-101-1/+1
| | | | | | | | | | | This test was broken from the start. It leads to creating a completely new stack for the main thread of the child process when started from the main thread of the parent. However, the main thread of a process can easily running on a completely different stack, if the parent's main thread was created by calling fork() from a pthread. For an example, see https://cygwin.com/ml/cygwin/2017-03/msg00113.html Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* errno: Stop using _impure_ptr->_errno completelyCorinna Vinschen2017-03-103-6/+5
| | | | | | | | We use errno AKA _REENT->_errno since the last century and only set _impure_ptr->_errno for backward compat. Stop that. Also, remove the last check for _impure_ptr->_errno in Cygwin code. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Drop redundant brackets in call to _reclaim_reentCorinna Vinschen2017-03-101-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Implement dladdr() (partially)Jon Turney2017-03-085-1/+57
| | | | | | | Note that this always returns with dli_sname and dli_saddr set to NULL, indicating no symbol matching addr could be found. Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
* yield: Don't lower thread priority, it leads to starvationCorinna Vinschen2017-03-081-5/+6
| | | | | | | ...and it's not required anymore to have the same effect as the original code post-XP. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: Emit correct errno EAGAIN if we can't create another threadCorinna Vinschen2017-03-081-0/+2
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Export timingsafe_bcmp and timingsafe_memcmpJon Turney2017-03-073-1/+5
| | | | Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
* Document pthread_cond_wait change in release notesCorinna Vinschen2017-03-071-0/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: pthread_cond_wait: Do as Linux and BSD do.Corinna Vinschen2017-03-071-22/+5
| | | | | | | | | | | | | | | POSIX states as follows about pthread_cond_wait: If a signal is delivered to a thread waiting for a condition variable, upon return from the signal handler the thread resumes waiting for the condition variable as if it was not interrupted, or it returns zero due to spurious wakeup. Cygwin so far employs the latter behaviour, while Linux and BSD employ the former one. Align Cygwin behaviour to Linux and BSD. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cwdstuff: Don't leave from setting the CWD prematurely on initCorinna Vinschen2017-03-031-8/+42
| | | | | | | | | | | | | | | | | | | | There are certain, very obscure scenarios, which render the Windows CWD handle inaccessible for reopening. An easy one is, the handle can be NULL if the permissions of the CWD changed under the parent processes feet. Originally we just set errno and returned, but in case of init at process startup that left the "posix" member NULL and subsequent calls to getcwd failed with EFAULT. We now check for a NULL handle and change the reopen approach accordingly. If that doesn't work, try to duplicate the handle instead. If duplicating fails, too, we set the dir handle to NULL and carry on. This will at least set posix to some valid path and subsequent getcwd calls won't fail. A NULL dir handle is ok, because we already do this for virtual paths. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Preserve order of dlopen'd modules in dll_list::topsortnewlib-snapshot-20170228David Allsopp2017-02-282-5/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch alters the behaviour of dll_list::topsort to preserve the order of dlopen'd units. The load order of unrelated DLLs is reversed every time fork is called, since dll_list::topsort finds the tail of the list and then unwinds to reinsert items. My change takes advantage of what should be undefined behaviour in dll_list::populate_deps (ndeps non-zero and ndeps and deps not initialised) to allow the deps field to be initialised prior to the call and appended to, rather than overwritten. All DLLs which have been dlopen'd have their deps list initialised with the list of all previously dlopen'd units. These extra dependencies mean that the unwind preserves the order of dlopen'd units. The motivation for this is the FlexDLL linker used in OCaml. The FlexDLL linker allows a dlopen'd unit to refer to symbols in previously dlopen'd units and it resolves these symbols in DllMain before anything else has initialised (including the Cygwin DLL). This means that dependencies may exist between dlopen'd units (which the OCaml runtime system understands) but which Windows is unaware of. During fork, the process-level table which FlexDLL uses to get the symbol table of each DLL is copied over but because the load order of dlopen'd DLLs is reversed, it is possible for FlexDLL to attempt to access memory in the DLL before it has been loaded and hence it fails with an access violation. Because the list is reversed on each call to fork, it means that a subsequent call to fork puts the DLLs back into the correct order, hence "even" invocations of fork work! An interesting side-effect is that this only occurs if the DLLs load at their preferred base address - if they have to be rebased, then FlexDLL works because at the time that the dependent unit is loaded out of order, there is still in memory the "dummy" DONT_RESOLVE_DLL_REFERENCES version of the dependency which, as it happens, will contain the correct symbol table in the data section. For my tests, this initially appeared to be an x86-only problem, but that was only because the two DLLs on x64 should have been rebased. Signed-off-by: David Allsopp <david.allsopp@metastack.com>
* Add 2.7.1 release fileCorinna Vinschen2017-02-241-0/+14
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Bump Cygwin version to 2.7.1Corinna Vinschen2017-02-241-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* fix parallel build for version.cc and winver.oMichael Haubenwallner2017-02-161-1/+3
| | | | Creating both version.cc and winver.o at once really should run once only.
* Cygwin: create separate bits/byteswap.hYaakov Selkowitz2017-02-083-37/+51
| | | | | | | | Match glibc behaviour to expose the public bswap_* macros only with an explicity #include <byteswap.h>; #include'ing <endian.h> should not expose them. Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
* Add release message for commit 609d2b2Corinna Vinschen2017-02-031-0/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix limited Internet speeds caused by inappropriate socket bufferingCorinna Vinschen2017-02-031-3/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't set SO_RCVBUF/SO_SNDBUF to fixed values, thus disabling autotuning. Patch modeled after a patch suggestion from Daniel Havey <dhavey@gmail.com> in https://cygwin.com/ml/cygwin-patches/2017-q1/msg00010.html: At Windows we love what you are doing with Cygwin. However, we have been getting reports from our hardware vendors that iperf is slow on Windows. Iperf is of course compiled against the cygwin1.dll and we believe we have traced the problem down to the function fdsock in net.cc. SO_RCVBUF and SO_SNDBUF are being manually set. The comments indicate that the idea was to increase the buffer size, but, this code must have been written long ago because Windows has used autotuning for a very long time now. Please do not manually set SO_RCVBUF or SO_SNDBUF as this will limit your internet speed. I am providing a patch, an STC and my cygcheck -svr output. Hope we can fix this. Please let me know if I can help further. Simple Test Case: I have a script that pings 4 times and then iperfs for 10 seconds to debit.k-net.fr With patch $ bash buffer_test.sh 178.250.209.22 usage: bash buffer_test.sh <iperf server name> Pinging 178.250.209.22 with 32 bytes of data: Reply from 178.250.209.22: bytes=32 time=167ms TTL=34 Reply from 178.250.209.22: bytes=32 time=173ms TTL=34 Reply from 178.250.209.22: bytes=32 time=173ms TTL=34 Reply from 178.250.209.22: bytes=32 time=169ms TTL=34 Ping statistics for 178.250.209.22: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 167ms, Maximum = 173ms, Average = 170ms ------------------------------------------------------------ Client connecting to 178.250.209.22, TCP port 5001 TCP window size: 64.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.137.196.108 port 58512 connected with 178.250.209.22 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 768 KBytes 6.29 Mbits/sec [ 3] 1.0- 2.0 sec 9.25 MBytes 77.6 Mbits/sec [ 3] 2.0- 3.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 3.0- 4.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 4.0- 5.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 5.0- 6.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 6.0- 7.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 7.0- 8.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 8.0- 9.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 9.0-10.0 sec 18.0 MBytes 151 Mbits/sec [ 3] 0.0-10.0 sec 154 MBytes 129 Mbits/sec Without patch: dahavey@DMH-DESKTOP ~ $ bash buffer_test.sh 178.250.209.22 Pinging 178.250.209.22 with 32 bytes of data: Reply from 178.250.209.22: bytes=32 time=168ms TTL=34 Reply from 178.250.209.22: bytes=32 time=167ms TTL=34 Reply from 178.250.209.22: bytes=32 time=170ms TTL=34 Reply from 178.250.209.22: bytes=32 time=169ms TTL=34 Ping statistics for 178.250.209.22: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 167ms, Maximum = 170ms, Average = 168ms ------------------------------------------------------------ Client connecting to 178.250.209.22, TCP port 5001 TCP window size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 10.137.196.108 port 58443 connected with 178.250.209.22 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 512 KBytes 4.19 Mbits/sec [ 3] 1.0- 2.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 2.0- 3.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 3.0- 4.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 4.0- 5.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 5.0- 6.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 6.0- 7.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 7.0- 8.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 8.0- 9.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 9.0-10.0 sec 1.50 MBytes 12.6 Mbits/sec [ 3] 0.0-10.1 sec 14.1 MBytes 11.7 Mbits/sec The output shows that the RTT from my machine to the iperf server is similar in both cases (about 170ms) however with the patch the throughput averages 129 Mbps while without the patch the throughput only averages 11.7 Mbps. If we calculate the maximum throughput using Bandwidth = Queue/RTT we get (212992 * 8)/0.170 = 10.0231 Mbps. This is just about what iperf is showing us without the patch since the buffer size is set to 212992 I believe that the buffer size is limiting the throughput. With the patch we have no buffer limitation (autotuning) and can develop the full potential bandwidth on the link. If you want to duplicate the STC you will have to find an iperf server (I found an extreme case) that has a large enough RTT distance from you and try a few times. I get varying results depending on Internet traffic but without the patch never exceed the limit caused by the buffering. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add release message for commit a1529738Jon Turney2017-01-311-0/+3
| | | | Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
* Add release message for commit 095cac4Corinna Vinschen2017-01-311-0/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: Add IUTF8 termios iflagCorinna Vinschen2017-01-314-23/+31
| | | | | | | | | | | | | | | | | | | | | | | | | The termios code doesn't handle erasing of multibyte characters in canonical mode, it always erases a single byte. When entering a multibyte character and then pressing VERASE, the input ends up with an invalid character. Following Linux we introduce the IUTF8 input flag now, set by default. When this flag is set, VERASE or VWERASE will check if the just erased input byte is a UTF-8 continuation byte. If so, it erases another byte and checks again until the entire UTF-8 character has been removed from the input buffer. Note that this (just as on Linux) does NOT work with arbitrary multibyte codesets. This only works with UTF-8. For a discussion what happens, see https://cygwin.com/ml/cygwin/2017-01/msg00299.html Sidenote: The eat_readahead function is now member of fhandler_termios, not fhandler_base. That's necessary to get access to the terminal's termios flags. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add release message for commit ca3e3bcCorinna Vinschen2017-01-201-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cleanup fhandler_console::read for readabilityCorinna Vinschen2017-01-191-22/+20
| | | | | | | | | - Drop virtual_key_code (only used once) - Convert macros wch and control_key_state to const vars unicode_char and ctrl_key_state. - Fix formatting Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* miscfuncs.cc: Revert exclusion of inclusion of exception.hCorinna Vinschen2017-01-191-0/+1
| | | | | | x86 still needs it. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Simplify check for Alt-NumpadCorinna Vinschen2017-01-193-39/+35
| | | | | | | | | Create two new inline functions is_alt_numpad_key(PINPUT_RECORD) and is_alt_numpad_event(PINPUT_RECORD) which contain the actual checks. Call these functions from fhandler_console::read and peek_console for better readability. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* miscfuncs.h: Drop now unneeded getentropy declarationCorinna Vinschen2017-01-191-1/+0
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* miscfuncs.cc: Drop unneeded includes and unused global variableCorinna Vinschen2017-01-191-12/+0
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* check_iovec: Change test to be more robust against invalid iovcnt valuesCorinna Vinschen2017-01-191-1/+1
| | | | | | Stop running wild if iovcnt is < 0 to begin with. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Don't assert on sum of iov_len overflowing an ssize_tCorinna Vinschen2017-01-191-3/+3
| | | | | | Rather return EINVAL per POSIX. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Move string functions from miscfunc.cc to strfuncs.ccCorinna Vinschen2017-01-192-192/+193
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Move getentropy/getrandom into own fileCorinna Vinschen2017-01-193-57/+71
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix copy/paste buglet in commentCorinna Vinschen2017-01-191-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add release message for commit 4652cc4Corinna Vinschen2017-01-191-0/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Handle Alt+Numpad key sequences in console input and selectCorinna Vinschen2017-01-192-3/+35
| | | | | | | | | | | | | | | | | | | | {p}select/{p}poll completely ignored Alt+Numpad key sequences in console input which results in newer readline using pselect to fail handling such sequences correctly. See https://cygwin.com/ml/cygwin/2017-01/msg00135.html During debugging and testing it turned out that while reading console input, single key presses during an Alt+Numpad sequences where not ignored, so ultimately a sequence like Alt-down Numpad-1 Numpad-2 Numpad-3 whihc is supposed to result in a single character in the input stream will actually result in 4 chars in the input stream, three control sequences and the actual character. Both problems should be fixed by this patch. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add release message for commit 688d943Corinna Vinschen2017-01-141-0/+4
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>