]> sourceware.org Git - newlib-cygwin.git/log
newlib-cygwin.git
4 years agopru: Fix memory corruption on syscall return
Dimitar Dimitrov [Wed, 3 Jun 2020 16:14:22 +0000 (19:14 +0300)]
pru: Fix memory corruption on syscall return

In the initial code I missed one level of pointer indirection. Instead
of storing errno in impure_data, _impure_ptr was corrupted.

Only simulator is impacted. Real targets have no OS and no syscalls.

This resolves a bunch of stdio cases from the GCC testsuite:
  FAIL->PASS: gcc.c-torture/execute/printf-2.c   -O0  execution test

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 years agoCygwin: add new IPPROTO_TCP options to release notes
Corinna Vinschen [Wed, 1 Jul 2020 19:33:15 +0000 (21:33 +0200)]
Cygwin: add new IPPROTO_TCP options to release notes

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: tcp: Support TCP_QUICKACK
Corinna Vinschen [Wed, 1 Jul 2020 19:26:59 +0000 (21:26 +0200)]
Cygwin: tcp: Support TCP_QUICKACK

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: tcp: Support TCP_USER_TIMEOUT
Corinna Vinschen [Wed, 1 Jul 2020 18:30:22 +0000 (20:30 +0200)]
Cygwin: tcp: Support TCP_USER_TIMEOUT

Use TCP_MAXRTMS on newer systems, TCP_MAXRT on older systems.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: tcp: Support TCP_KEEPIDLE, TCP_KEEPCNT, TCP_KEEPINTVL
Corinna Vinschen [Wed, 1 Jul 2020 18:27:10 +0000 (20:27 +0200)]
Cygwin: tcp: Support TCP_KEEPIDLE, TCP_KEEPCNT, TCP_KEEPINTVL

Use WSAIoctl(SIO_KEEPALIVE_VALS) on older systems.

Make sure that keep-alive timeout is equivalent to
TCP_KEEPIDLE + TCP_KEEPCNT * TCP_KEEPINTVL on older systems,
even with TCP_KEEPCNT being a fixed value on those systems.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: tcp: Support TCP_FASTOPEN
Corinna Vinschen [Tue, 30 Jun 2020 12:34:19 +0000 (14:34 +0200)]
Cygwin: tcp: Support TCP_FASTOPEN

TCP_FASTOPEN is supported since W10 1607.  Fake otherwise.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: tcp: fix IPPROTO_TCP option handling
Corinna Vinschen [Tue, 30 Jun 2020 11:33:57 +0000 (13:33 +0200)]
Cygwin: tcp: fix IPPROTO_TCP option handling

- Drop definitions from <cygwin/sockets.h>
- Drop options only available on BSD
- Fix value of TCP_MAXSEG.  It was still defined as the BSD value
  while WinSock uses another value
- Handle the fact that TCP_MAXSEG is a R/O value in WinSock

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: pty, termios: Unify thoughts of read ahead beffer handling.
Takashi Yano via Cygwin-patches [Tue, 30 Jun 2020 11:12:50 +0000 (20:12 +0900)]
Cygwin: pty, termios: Unify thoughts of read ahead beffer handling.

- Return value of eat_readahead() is redefined. The return values
  of fhandler_termios::eat_readahead() and fhandler_pty_slave::
  eat_readahead() were little bit different. This patch unifies
  them to number of bytes eaten by eat_readahead().
- Considerration for raixget() is added to fhandler_pty_master::
  accept_input() code.
- Transfering contents of read ahead buffer in
  fhandler_pty_master::transfer_input_to_pcon() is removed since
  it is not necessary.
- fhandler_pty_slave::eat_readahead() ckecks EOL only when ICANON
  is set.
- Guard for _POSIX_VDISABLE is added in checking EOL.

4 years agoCygwin: pty: Discard CSI > Pm m sequence from native windows apps.
Takashi Yano via Cygwin-patches [Tue, 30 Jun 2020 11:12:13 +0000 (20:12 +0900)]
Cygwin: pty: Discard CSI > Pm m sequence from native windows apps.

- If vim is started from WSL (Ubuntu) which is executed in pseudo
  console in mintty, shift key and ctrl key do not work. Though
  this issue is similar to the issue resolved by commit
  4527541ec66af8d82bb9dba5d25afdf489d71271, that commit is not
  effective for this issue. This patch fixes the issue by discarding
  "CSI > Pm m" in fhandler_pty_master::pty_master_fwd_thread().

4 years agofenv support arm
Eshan dhawan via Newlib [Wed, 3 Jun 2020 17:45:09 +0000 (23:15 +0530)]
fenv support arm

Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
4 years agoRegenerate libm/machine configuration files for powerpc
Jeff Johnston [Wed, 10 Jun 2020 00:59:04 +0000 (20:59 -0400)]
Regenerate libm/machine configuration files for powerpc

4 years agoCygwin: pty: Fix screen distortion after less for native apps again.
Takashi Yano via Cygwin-patches [Thu, 4 Jun 2020 01:43:19 +0000 (10:43 +0900)]
Cygwin: pty: Fix screen distortion after less for native apps again.

- Commit c4b060e3fe3bed05b3a69ccbcc20993ad85e163d seems to be not
  enough. Moreover, it does not work as expected at all in Win10
  1809. This patch essentially reverts that commit and add another
  fix. After all, the cause of the problem was a race issue in
  switch_to_pcon_out flag. That is, this flag is set when native
  app starts, however, it is delayed by wait_pcon_fwd(). Since the
  flag is not set yet when less starts, the data which should go
  into the output_handle accidentally goes into output_handle_cyg.
  This patch fixes the problem more essentially for the cause of
  the problem than previous one.

4 years agohard float support for PowerPC taken from FreeBSD
Eshan dhawan via Newlib [Tue, 2 Jun 2020 16:41:40 +0000 (22:11 +0530)]
hard float support for PowerPC taken from FreeBSD

Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
4 years agoBump version to 3.1.6
Corinna Vinschen [Mon, 1 Jun 2020 08:48:11 +0000 (10:48 +0200)]
Bump version to 3.1.6

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: pty: Fix screen distortion after using less for native apps. cygwin-3_1_5-release
Takashi Yano via Cygwin-patches [Mon, 1 Jun 2020 06:16:18 +0000 (15:16 +0900)]
Cygwin: pty: Fix screen distortion after using less for native apps.

- If the output of non-cygwin apps is browsed using less, screen is
  ocasionally distorted after less exits. This frequently happens
  if cmd.exe is executed after less. This patch fixes the issue.

4 years agoCygwin: pty: Revise the code which prevents undesired window title.
Takashi Yano via Cygwin-patches [Sun, 31 May 2020 05:53:20 +0000 (14:53 +0900)]
Cygwin: pty: Revise the code which prevents undesired window title.

- In current pty, the window title can not be set from non-cygwin
  program due to the code which prevents overwriting the window
  title to "cygwin-console-helper.exe" in fhandler_pty_master::pty_
  master_fwd_thread(). This patch fixes the issue.

4 years agoCygwin: pty: Clean up fhandler_pty_master::pty_master_fwd_thread().
Takashi Yano via Cygwin-patches [Sun, 31 May 2020 05:53:19 +0000 (14:53 +0900)]
Cygwin: pty: Clean up fhandler_pty_master::pty_master_fwd_thread().

- Remove the code which is not necessary anymore.

4 years agoCygwin: console: Discard some unsupported escape sequences.
Takashi Yano via Cygwin-patches [Sun, 31 May 2020 05:53:18 +0000 (14:53 +0900)]
Cygwin: console: Discard some unsupported escape sequences.

- If the cygwin vim is started from a non-cygwin process which is
  executed in pseudo console, shift key and ctrl key do not work.
  In this case, vim is executed under /dev/cons*. If vim outputs
  escape sequence which is not supported by pseudo console, the
  escape sequence is leaked into the parent pty. This causes
  unexpected results. This patch fixes the issue by discarding
  "CSI > Pm m". "OSC 10;? BEL/ST" and "OSC 11;? BEL/ST" are
  discarded as well.

4 years agoCygwin: pty: Prevent garbage remained in read ahead buffer.
Takashi Yano via Cygwin-patches [Sun, 31 May 2020 05:53:17 +0000 (14:53 +0900)]
Cygwin: pty: Prevent garbage remained in read ahead buffer.

- After commit 29431fcb5b14d4c5ac3b3161a076eb1a208349d9, the issue
  reported in https://cygwin.com/pipermail/cygwin/2020-May/245057.html
  occurs. This is caused by the following mechanism. Cygwin less
  called from non-cygwin git is executed under /dev/cons* rather
  than /dev/pty* because parent git process only inherits pseudo
  console handle. Therefore, less sets ICANON flag for /dev/cons*
  rather than original /dev/pty*. When pty is switched to non-cygwin
  git process, line_edit() is used in fhandler_pty_master::write()
  only to set input_available_event and read ahead buffer is supposed
  to be flushed in accept_input(). However, ICANON flag is not set
  for /dev/pty*, so accept_input() is not called unless newline
  is entered. As a result, the input data remains in the read ahead
  buffer. This patch fixes the issue.

4 years agoCygwin: update C++ dialect to gnu++14
Corinna Vinschen [Sat, 30 May 2020 17:41:18 +0000 (19:41 +0200)]
Cygwin: update C++ dialect to gnu++14

Disable -std option since gnu++14 is default anyway, but keep
it available as comment.

Update dynamic exception specifications deprecated with
C++11 to C++11-introduced noexcept expression.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: console: Make cursor keys work in vim under ConEmu.
Takashi Yano via Cygwin-patches [Sat, 30 May 2020 09:25:03 +0000 (18:25 +0900)]
Cygwin: console: Make cursor keys work in vim under ConEmu.

- After commit 774b8996d1f3e535e8267be4eb8e751d756c2cec, cursor
  keys do not work in vim under ConEmu without cygwin-connector.
  This patch fixes the issue.

4 years agoCygwin: stat: fix st_mode of fifos again
Ken Brown [Thu, 28 May 2020 17:05:32 +0000 (13:05 -0400)]
Cygwin: stat: fix st_mode of fifos again

This partially reverts commit
f36262d56ac78f04de147746ce4a85c6155e4a23.  That commit incorrectly
made the st_mode of a fifo reflect the Windows permissions of the disk
file underlying the fifo.

4 years agoCygwin: pty: Prevent meaningless ResizePseudoConsole() calls.
Takashi Yano via Cygwin-patches [Thu, 28 May 2020 13:49:26 +0000 (22:49 +0900)]
Cygwin: pty: Prevent meaningless ResizePseudoConsole() calls.

- This patch prevents to call ResizePseudoConsole() unless the pty
  is resized.

4 years agoCygwin: pty: Fix a bug in free_attached_console().
Takashi Yano via Cygwin-patches [Thu, 28 May 2020 03:43:05 +0000 (12:43 +0900)]
Cygwin: pty: Fix a bug in free_attached_console().

- After commit 7659ff0f5afd751f42485f2684c799c5f37b0fb9, nohup does
  not work as expected. This patch fixes the issue.

  Addresses:
  https://cygwin.com/pipermail/cygwin-developers/2020-May/011885.html

4 years agoCygwin: FAQ: fix Cygwin build requirements
Corinna Vinschen [Tue, 26 May 2020 17:15:37 +0000 (19:15 +0200)]
Cygwin: FAQ: fix Cygwin build requirements

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: drop useless comment
Corinna Vinschen [Tue, 26 May 2020 08:22:41 +0000 (10:22 +0200)]
Cygwin: drop useless comment

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: add missing files to 'clean' build rule
Corinna Vinschen [Tue, 26 May 2020 08:19:35 +0000 (10:19 +0200)]
Cygwin: add missing files to 'clean' build rule

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: revamp localtime.o build rule
Corinna Vinschen [Mon, 25 May 2020 15:40:27 +0000 (17:40 +0200)]
Cygwin: revamp localtime.o build rule

Rename localtime.c.patched to localtime.patched.c to keep the correct
language suffix.

Create localtime.patched.c in the build dir rather than in the source
dir.  Decouple the build rule for creating localtime.patched.c from
the rule to build localtime.o, so we don't have to rebuild the patched
source file all the time.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: convert localtime_wrapper.c to plain C source
Corinna Vinschen [Mon, 25 May 2020 11:50:36 +0000 (13:50 +0200)]
Cygwin: convert localtime_wrapper.c to plain C source

That also requires a small tweak to localtime.c.patch, otherwise
GCC complains about the position of the 'trydefrules' label.
Also, simplify includes.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: rename localtime.cc to localtime_wrapper.c
Corinna Vinschen [Mon, 25 May 2020 11:46:24 +0000 (13:46 +0200)]
Cygwin: rename localtime.cc to localtime_wrapper.c

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: move localtime.o build rule to end of file
Corinna Vinschen [Mon, 25 May 2020 11:45:17 +0000 (13:45 +0200)]
Cygwin: move localtime.o build rule to end of file

otherwise a simple `make' in the cygwin dir won't build
the DLL anymore.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: tzcode resync: details
Mark Geisert [Fri, 22 May 2020 09:32:53 +0000 (02:32 -0700)]
Cygwin: tzcode resync: details

Add tz_posixrules.h with data generated from most recent Cygwin tzdata
package.  Establish localtime.cc as primarily a wrapper around a patched
copy of localtime.c.  See README for more information.

4 years agoCygwin: tzcode resync: imports
Mark Geisert [Fri, 22 May 2020 09:32:52 +0000 (02:32 -0700)]
Cygwin: tzcode resync: imports

Import most recent NetBSD localtime.c, private.h, and tzfile.h.  An
empty namespace.h suffices for Cygwin.

4 years agoCygwin: tzcode resync: basics
Mark Geisert [Fri, 22 May 2020 09:32:51 +0000 (02:32 -0700)]
Cygwin: tzcode resync: basics

Modifies winsup/cygwin/Makefile.in to build localtime.o from items in
new winsup/cygwin/tzcode subdirectory.  Compiler option "-fpermissive"
is used to accept warnings about missing casts on the return values of
malloc() calls.  This patch also removes existing localtime.cc and
tz_posixrules.h from winsup/cygwin as they are superseded by the
subsequent patches in this set.

4 years agoCygwin: fix declaration of __small_{v}sprintf
Corinna Vinschen [Mon, 25 May 2020 11:10:41 +0000 (13:10 +0200)]
Cygwin: fix declaration of __small_{v}sprintf

Both functions are declared as extern "C" functions in
sys/smallprint.h, but as C++ funcs in winsup.h and in the
source itself.

Add extern "C to definitions, remove declarations in winsup.h
and include sys/smallprint.h instead.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: pty: Stop counting number of slaves attached to pseudo console.
Takashi Yano via Cygwin-patches [Mon, 25 May 2020 08:49:08 +0000 (17:49 +0900)]
Cygwin: pty: Stop counting number of slaves attached to pseudo console.

- The number of slaves attached to pseudo console is used only for
  triggering redraw screen. Counting was not only needless, but also
  did not work as expected. This patch removes the code for counting.

4 years agoCygwin: pty: Revise code to make system_printf() work after close.
Takashi Yano via Cygwin-patches [Thu, 21 May 2020 08:25:01 +0000 (17:25 +0900)]
Cygwin: pty: Revise code to make system_printf() work after close.

- After commit 0365031ce1347600d854a23f30f1355745a1765c, the issue
  https://cygwin.com/pipermail/cygwin-patches/2020q2/010259.html
  occurs. This patch fixes the issue.

4 years agoCygwin: FIFO: add missing unlock
Ken Brown [Tue, 19 May 2020 14:25:43 +0000 (10:25 -0400)]
Cygwin: FIFO: add missing unlock

There was a missing call to reader_opening_unlock on one of the error
exits in fhandler_fifo::open.

4 years agoCygwin: FIFO: Revert "take ownership on exec"
Ken Brown [Tue, 19 May 2020 14:14:10 +0000 (10:14 -0400)]
Cygwin: FIFO: Revert "take ownership on exec"

This reverts commit 39a9cd94651d306117c47ea1ac3eab45f6098d0e.

There is no need to explicitly take ownership in fixup_after_exec; if
ownership transfer is needed, it will be taken care of by
fhandler_fifo::close when the parent closes.  Moreover, closing the
parent's fifo_reader_thread can cause problems, such as the one
reported here:

  https://cygwin.com/pipermail/cygwin-patches/2020q2/010235.html

4 years agoCygwin: pty: Make system_printf() work after closing pty slave.
Takashi Yano via Cygwin-patches [Tue, 19 May 2020 11:35:59 +0000 (20:35 +0900)]
Cygwin: pty: Make system_printf() work after closing pty slave.

- Current pty cannot show system_printf() output after closing pty
  slave. This patch fixes the issue.

4 years agoCygwin: pty: Call FreeConsole() only if attached to current pty.
Takashi Yano via Cygwin-patches [Tue, 19 May 2020 10:55:23 +0000 (19:55 +0900)]
Cygwin: pty: Call FreeConsole() only if attached to current pty.

- After commit 071b8e0cbd4be33449c12bb0d58f514ed8ef893c, the problem
  reported in https://cygwin.com/pipermail/cygwin/2020-May/244873.html
  occurs. This is due to freeing console device accidentally rather
  than pseudo console. This patch makes sure to call FreeConsole()
  only if the process is attached to the pseudo console of the current
  pty.

4 years agoReimplement aligned_alloc
Szabolcs Nagy [Tue, 19 May 2020 09:52:49 +0000 (10:52 +0100)]
Reimplement aligned_alloc

The original implementation had multiple issues:

- Only worked when posix_memalign was available (Linux, RTEMS).
- Violated C11 link namespace rules by calling posix_memalign.
- Failed to set errno on error.

These can be fixed by essentially using the same implementation
for aligned_alloc as for memalign, i.e. simply calling _memalign_r
(which is always available and a "more reserved name" although
technically still not in the reserved link namespace, at least
code written in c cannot define a colliding symbol, newlib has
plenty such namespace issues so this is fine).

It is not clear what the right policy is when MALLOC_PROVIDED is set,
currently that does not cover aligned_alloc so it is kept that way.

Tested on aarch64-none-elf

4 years agoCygwin: termios: Set ECHOE, ECHOK, ECHOCTL and ECHOKE by default.
Takashi Yano via Cygwin-patches [Sun, 17 May 2020 02:34:44 +0000 (11:34 +0900)]
Cygwin: termios: Set ECHOE, ECHOK, ECHOCTL and ECHOKE by default.

- Backspace key does not work correctly in linux session opend by
  ssh from cygwin console if the shell is bash. This is due to lack
  of these flags.

  Addresses: https://cygwin.com/pipermail/cygwin/2020-May/244837.html.

4 years agocygwin: doc: Add keywords for ACE order issues
David Macek via Cygwin-patches [Wed, 13 May 2020 15:34:06 +0000 (17:34 +0200)]
cygwin: doc: Add keywords for ACE order issues

Windows Explorer shows a warning with Cygwin-created DACLs, but putting
the text of the warning into Google doesn't lead to the relevant Cygwin
docs.  Let's copy the warning text into the docs in the hopes of helping
confused users.  Most of the credit for the wording belongs to Yaakov
Selkowitz.

Latest inquiry: <https://cygwin.com/pipermail/cygwin/2020-May/244814.html>

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: FIFO: improve the interruptibility of raw_read
Ken Brown [Mon, 11 May 2020 13:03:37 +0000 (09:03 -0400)]
Cygwin: FIFO: improve the interruptibility of raw_read

During a blocking read, we sleep for 1 ms after each iteration through
the connected writers.  Currently we do this by calling Sleep (1).
Remove this call to Sleep and instead change the timeout in the
cygwait call from 0 to 1, so that raw_read can be interrupted while
sleeping.

4 years agoCygwin: FIFO: code simplification
Ken Brown [Sat, 9 May 2020 21:25:39 +0000 (17:25 -0400)]
Cygwin: FIFO: code simplification

There are currently three functions that call NtQueryInformationFile
to determine the state of a pipe instance.  Do this only once, in a
new fifo_client_handler::set_state () function, and call that when
state information is needed.

Remove the fifo_client_handler methods pipe_state and get_state, which
are no longer needed.

Make fhandler_fifo::get_fc_handler return a reference, for use in
select.cc:peek_fifo.

Make other small changes to ensure that this commit doesn't change any
decisions based on the state of a fifo_client_handler.

The tricky part is interpreting FILE_PIPE_CLOSING_STATE, which we
translate to fc_closing.  Our current interpretation, which is not
changing as a result of this commit, is that the writer at the other
end of the pipe instance is viewed as still connected from the point
of view of raw_read and determining EOF.

But it is not viewed as still connected if we are deciding whether to
unblock a new reader that is trying to open.

4 years agoCygwin: fifo: fix type of fifo_reader_id_t operators
Corinna Vinschen [Fri, 8 May 2020 18:00:24 +0000 (20:00 +0200)]
Cygwin: fifo: fix type of fifo_reader_id_t operators

fifo_reader_id_t::operator == and != have been defined without type
accidentally.  For some weird reason, only x86 gcc complains about
this problem, not x86_64 gcc.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: add pseudo console patch to release text
Corinna Vinschen [Mon, 4 May 2020 09:39:44 +0000 (11:39 +0200)]
Cygwin: add pseudo console patch to release text

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoDocument recent FIFO changes
Ken Brown [Fri, 8 May 2020 11:41:36 +0000 (07:41 -0400)]
Document recent FIFO changes

4 years agoCygwin: FIFO: update commentary
Ken Brown [Tue, 14 Apr 2020 13:45:44 +0000 (09:45 -0400)]
Cygwin: FIFO: update commentary

The beginning of fhandler_fifo.cc contains a long comment giving an
overview of the FIFO implementation.  This is now updated to describe
the support for multiple readers.

4 years agoCygwin: FIFO: support opening multiple readers
Ken Brown [Wed, 6 May 2020 15:31:39 +0000 (11:31 -0400)]
Cygwin: FIFO: support opening multiple readers

Although we can have multiple readers open because of dup/fork/exec,
the current code does not support multiple readers opening a FIFO by
explicitly calling 'open'.

The main complication in supporting this is that when a blocking
reader tries to open and there's already one open, it has to check
whether there any writers open.  It can't rely on the write_ready
event, whose state hasn't changed since the first writer opened.

To fix this, add two new named events, check_write_ready_evt and
write_ready_ok_evt, and a new method, check_write_ready().

The first event signals the owner's reader thread to call
check_write_ready(), which polls the fc_handler list to check for
connected writers.  If it finds none, it checks to see if there's a
writer in the process and then sets/resets write_ready appropriately.

When check_write_ready() finishes it sets write_ready_ok_evt to signal
the reader that write_ready has been updated.

The polling is done via fifo_client_handler::pipe_state().  As long as
it's calling that function anyway, check_write_ready() updates the
state of each handler.

Also add a new lock to prevent a race if two readers are trying to
open simultaneously.

4 years agoCygwin: FIFO: allow any reader to take ownership
Ken Brown [Sat, 25 Apr 2020 13:54:18 +0000 (09:54 -0400)]
Cygwin: FIFO: allow any reader to take ownership

Add a take_ownership method, used by raw_read and select.cc:peek_fifo.
It wakes up all fifo_reader_threads and allows the caller to become
owner.  The work is done by the fifo_reader_threads.

For synchronization we introduce several new fhandler_fifo data
members and methods:

- update_needed_evt signals the current owner to stop listening for
  writer connections and update its fc_handler list.

- shared_fc_handler() gets and sets the status of the fc_handler
  update process.

- get_pending_owner() and set_pending_owner() get and set the reader
  that is requesting ownership.

Finally, a new 'reading_lock' prevents two readers from trying to take
ownership simultaneously.

4 years agoCygwin: FIFO: find a new owner when closing
Ken Brown [Fri, 24 Apr 2020 13:05:12 +0000 (09:05 -0400)]
Cygwin: FIFO: find a new owner when closing

If the owning reader is closing, wait for another reader (if there is
one) to take ownership before closing the owner's pipe handles.

To synchronize the ownership transfer, add events owner_needed_evt and
owner_found_evt, and add methods owner_needed and owner_found to
set/reset them.

Modify the fifo_reader_thread function to wake up all non-owners when
a new owner is needed.

Make a cosmetic change in close so that fhandler_base::close is called
only if we have a write handle.  This prevents strace output from
being littered with statements that the null handle is being closed.

4 years agoCygwin: FIFO: take ownership on exec
Ken Brown [Fri, 24 Apr 2020 01:29:32 +0000 (21:29 -0400)]
Cygwin: FIFO: take ownership on exec

If fixup_after_exec is called on a non-close-on-exec reader whose
parent is the owner, transfer ownership to the child.  Otherwise the
parent's pipe handles will be closed before any other reader can
duplicate them.

To help with this, make the cancel_evt and thr_sync_evt handles
inheritable, so that the child can terminate the parent's
fifo_reader_thread (and the parent will update the shared fc_handler
list).

Add an optional argument 'from_exec' to update_my_handlers to simplify
its use in this case; no handle duplication is required.

4 years agoCygwin: FIFO: add a shared fifo_client_handler list
Ken Brown [Thu, 23 Apr 2020 22:43:42 +0000 (18:43 -0400)]
Cygwin: FIFO: add a shared fifo_client_handler list

This is in a new shared memory section.  We will use it for temporary
storage of the owner's fc_handler list when we need to change owner.
The new owner can then duplicate the pipe handles from that list
before taking ownership.

Add several shared data members and methods that are needed for the
duplication process

Add methods update_my_handlers and update_shared_handlers that carry
out the duplication.

Allow the shared list to grow dynamically, up to a point.  Do this by
initially reserving a block of memory (currently 100 pages) and only
committing pages as needed.

Add methods create_shared_fc_handler, reopen_shared_fc_handler, and
remap_shared_fc_handler to create the new shared memory section,
reopen it, and commit new pages.  The first is called in open, the
second is called in dup/fork/exec, and the third is called in
update_shared_handlers if more shared memory is needed.

Modify the fifo_reader_thread function to call update_my_handlers when
it finds that there is no owner.  Also make it call
update_shared_handlers when the owner's thread terminates, so that the
new owner will have an accurate shared fc_handler list from which to
duplicate.

For convenience, add new methods cleanup_handlers and
close_all_handlers.  And add an optional arg to add_client_handler
that allows it to create a new fifo_client_handler without creating a
new pipe instance.

4 years agoCygwin: FIFO: allow fc_handler list to grow dynamically
Ken Brown [Thu, 2 Apr 2020 17:47:18 +0000 (13:47 -0400)]
Cygwin: FIFO: allow fc_handler list to grow dynamically

Make fc_handler a pointer to malloc'd memory instead of a fixed-size
array.  The size is now a new data member 'shandlers'.  Call realloc
in add_client_handler if we need to grow the array.

free fc_handler in close.  As long as we're touching that code, also
remove an unneeded lock.

4 years agoCygwin: FIFO: designate one reader as owner
Ken Brown [Thu, 26 Mar 2020 18:32:10 +0000 (14:32 -0400)]
Cygwin: FIFO: designate one reader as owner

Among all the open readers of a FIFO, one is declared to be the owner.
This is the only reader that listens for client connections, and it is
the only one that has an accurate fc_handler list.

Add shared data and methods for getting and setting the owner, as well
as a lock to prevent more than one reader from accessing these data
simultaneously.

Modify the fifo_reader_thread so that it checks the owner at the
beginning of its loop.  If there is no owner, it takes ownership.  If
there is an owner but it is a different reader, the thread just waits
to be canceled.  Otherwise, it listens for client connections as
before.

Remove the 'first' argument from create_pipe_instance.  It is not
needed, and it may be confusing in the future since only the owner
knows whether a pipe instance is the first.

When opening a reader, don't return until the fifo_reader_thread has
time to set an owner.

If the owner closes, indicate that there is no longer an owner.

Clear the child's fc_handler list in dup, and don't bother duplicating
the handles.  The child never starts out as owner, so it can't use
those handles.

Do the same thing in fixup_after_fork in the close-on-exec case.  In
the non-close-on-exec case, the child inherits an fc_handler list that
it can't use, but we can just leave it alone; the handles will be
closed when the child is closed.

4 years agoCygwin: FIFO: introduce a new type, fifo_reader_id_t
Ken Brown [Wed, 25 Mar 2020 23:22:10 +0000 (19:22 -0400)]
Cygwin: FIFO: introduce a new type, fifo_reader_id_t

This uniquely identifies an fhandler_fifo open for reading in any
process.

Add a new data member 'me' of this type, which is set in open, dup,
fork, and exec.

4 years agoCygwin: FIFO: keep track of the number of readers
Ken Brown [Fri, 27 Mar 2020 13:43:30 +0000 (09:43 -0400)]
Cygwin: FIFO: keep track of the number of readers

Add data and methods to the shared memory that keep track of the
number of open readers.

Increment this number in open, dup, fork, and exec.  Decrement it in
close.  Reset read_ready if there are no readers left.

4 years agoCygwin: FIFO: add shared memory
Ken Brown [Tue, 17 Mar 2020 16:29:56 +0000 (12:29 -0400)]
Cygwin: FIFO: add shared memory

Even though we currently allow a FIFO to be opened for reading only
once, we can still have more than one reader open because of dup and
fork.  Add a named shared memory section accessible to all readers of
a given FIFO.  In future commits we will add information needed by all
readers to this section

Add a class fifo_shmem_t that lets us access this information.

Add a method create_shmem that is called when a reader opens, and add
a method reopen_shmem that is called by dup, fork, and exec.  (Each
new reader needs its own view of the shared memory.)

4 years agoCygwin: FIFO: use a cygthread instead of a homemade thread
Ken Brown [Thu, 26 Mar 2020 18:29:50 +0000 (14:29 -0400)]
Cygwin: FIFO: use a cygthread instead of a homemade thread

This will simplify future work.

Rename the thread from "listen_client_thread" to "fifo_reader_thread"
because it will be used for more than just listening.

Remove the fixup_before stuff, which won't be needed after future
changes to fixup_after_fork and fixup_after_exec.

4 years agoCygwin: FIFO: make opening a writer more robust
Ken Brown [Tue, 17 Mar 2020 18:14:47 +0000 (14:14 -0400)]
Cygwin: FIFO: make opening a writer more robust

- Make read_ready a manual-reset event.

- Signal read_ready in open instead of in the listen_client_thread.

- Don't reset read_ready when the listen_client thread terminates;
  instead do it in close().

- Rearrange open and change its error handling.

- Add a wait_open_pipe method that waits for a pipe instance to be
  available and then calls open_pipe.  Use it when opening a writer if
  we can't connect immediately.  This can happen if the system is
  heavily loaded and/or if many writers are trying to open
  simultaneously.

4 years agoCygwin: FIFO: fix hit_eof
Ken Brown [Sun, 26 Apr 2020 13:38:46 +0000 (09:38 -0400)]
Cygwin: FIFO: fix hit_eof

According to Posix, a FIFO open for reading is at EOF if it is empty
and there are no writers open.

The only way to test this is to poll the fifo_client_handlers as in
raw_read and select.cc:peek_fifo.  The current hit_eof instead relies
on the value of nconnected, which can be out of date.  On the one
hand, it doesn't take into account writers that were connected but
have since closed.  On the other hand, it doesn't take into account
writers that are in the process of opening but haven't yet connected.

Fix this by introducing a maybe_eof method that tentatively assumes
EOF if there are no connected writers after polling.  Then check for
writers currently opening (via a new 'writer_opening' event), and wait
for the fifo_reader_thread to record any new connection that was made
while we were polling.

To handle the needs of peek_fifo, replace the get_fc_handle method
by a get_fc_handler method, and add a fifo_client_handler::get_state
method.

Remove the is_connected method, which was used only in peek_fifo and
is no longer needed.

Remove the nconnected data member, which was used only for the flawed
hit_eof.

Add some comments about events to fhandler.h.

4 years agoCygwin: FIFO: dup/fork/exec: make sure child starts unlocked
Ken Brown [Mon, 4 May 2020 15:36:20 +0000 (11:36 -0400)]
Cygwin: FIFO: dup/fork/exec: make sure child starts unlocked

There can be deadlocks if the child starts with its fifo_client_lock
in the locked state.

4 years agoCygwin: FIFO: honor the flags argument in dup
Ken Brown [Wed, 25 Mar 2020 13:31:29 +0000 (09:31 -0400)]
Cygwin: FIFO: honor the flags argument in dup

Also improve the error handling.

4 years agoCygwin: FIFO: remove the arm method
Ken Brown [Thu, 23 Apr 2020 12:14:05 +0000 (08:14 -0400)]
Cygwin: FIFO: remove the arm method

There's no reason to check for errors when we set read_ready or
write_ready.  We don't do that for other events.

4 years agoCygwin: FIFO: simplify the listen_client_thread code
Ken Brown [Wed, 29 Apr 2020 22:53:05 +0000 (18:53 -0400)]
Cygwin: FIFO: simplify the listen_client_thread code

Always return 0; no one is doing anything with the return value
anyway.

Remove the return value from stop_listen_client.

Make the connection event auto-reset, so that we don't have to reset
it later.

Simplify the process of connecting a bogus client when thread
termination is signaled.

Make some failures fatal.

Remove the unnecessary extra check for thread termination near the end
of listen_client_thread.

4 years agoCygwin: FIFO: change the fifo_client_connect_state enum
Ken Brown [Wed, 6 May 2020 22:39:26 +0000 (18:39 -0400)]
Cygwin: FIFO: change the fifo_client_connect_state enum

Make the values correspond to the possible return values of
fifo_client_handler::pipe_state().

When cleaning up the fc_handler list in listen_client_thread(), don't
delete handlers in the fc_closing state.  I think the pipe might still
have input to be read in that case.

Set the state to fc_closing later in the same function if a connection
is made and the status returned by NtFsControlFile is
STATUS_PIPE_CLOSING.

In raw_read, don't error out if NtReadFile returns an unexpected
status; just set the state of that handler to fc_error.  One writer in
a bad state doesn't justify giving up on reading.

4 years agoCygwin: FIFO: simplify the fifo_client_handler structure
Ken Brown [Mon, 16 Mar 2020 22:04:28 +0000 (18:04 -0400)]
Cygwin: FIFO: simplify the fifo_client_handler structure

Replace the 'fhandler_base *' member by a HANDLE to the server side of
the Windows named pipe instance.  Make the corresponding
simplifications throughout.

4 years agoCygwin: FIFO: minor change - use NtClose
Ken Brown [Tue, 17 Mar 2020 14:36:34 +0000 (10:36 -0400)]
Cygwin: FIFO: minor change - use NtClose

Replace CloseHandle by NtClose since all handles are created by NT
functions.

4 years agoRevert "localtime define _DIAGASSERT" and followups affecting localtime.cc
Corinna Vinschen [Mon, 4 May 2020 09:22:54 +0000 (11:22 +0200)]
Revert "localtime define _DIAGASSERT" and followups affecting localtime.cc

This reverts commits 453b6d17bf0581e55258c5eb6dc7afbad1927cab,
                     489a47d6036660a6cbab1addfb2b7678c0de8bf2,
                     3003c3dacd157c11f5e035bc18bdd30631800720,
                     9e29639ca01208a4a8bac5b9d0f6491b34b1017e,
                     a40701c7dc9970457a19728e371c71e7501057e7,
                     0a41de2725dbf2f325e55016d85d76560845ff8d,
                     b8aa5f7a0fe70a9a53fe4019227271a78758ae67,
                     0f4bda879283eaf013f86dd80e5588721a811ea0,
                     65bf580752db7ac01ecae19dc56aa26ea34f5e47,
                     3f0c2ac96e7c493bbfc2bc1b0c1274445b756a9d,
                     76d4d40b8b23d046473a5946cf6b83faa36ae7be,
                     f2e06d8af5f390d81b64375a69ca834ca19d6029.

4 years agosetup_pseudoconsole(): handle missing/incorrect helper gracefully
Johannes Schindelin [Sat, 2 May 2020 13:03:07 +0000 (15:03 +0200)]
setup_pseudoconsole(): handle missing/incorrect helper gracefully

When `cygwin-console-helper.exe` is either missing, or corresponds to a
different Cygwin runtime, we currently wait forever while setting up
access to the pseudo console, even long after the process is gone that
was supposed to signal that it set up access to the pseudo console.

Let's handle that more gracefully: if the process exited without
signaling, we cannot use the pseudo console. In that case, let's just
fall back to not using it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
4 years agolocaltime define _DIAGASSERT
Corinna Vinschen [Wed, 29 Apr 2020 07:51:52 +0000 (09:51 +0200)]
localtime define _DIAGASSERT

4 years agolocaltime 1.82
Corinna Vinschen [Tue, 28 Apr 2020 19:35:41 +0000 (21:35 +0200)]
localtime 1.82

4 years agolocaltime 1.81
Corinna Vinschen [Tue, 28 Apr 2020 19:26:45 +0000 (21:26 +0200)]
localtime 1.81

4 years agolocaltime 1.80
Corinna Vinschen [Tue, 28 Apr 2020 19:21:14 +0000 (21:21 +0200)]
localtime 1.80

4 years agolocaltime 1.79
Corinna Vinschen [Tue, 28 Apr 2020 19:20:18 +0000 (21:20 +0200)]
localtime 1.79

4 years agolocaltime 1.78
Corinna Vinschen [Tue, 28 Apr 2020 19:14:01 +0000 (21:14 +0200)]
localtime 1.78

4 years agolocaltime 1.77
Corinna Vinschen [Tue, 28 Apr 2020 18:58:29 +0000 (20:58 +0200)]
localtime 1.77

4 years agolocaltime 1.76
Corinna Vinschen [Tue, 28 Apr 2020 18:57:34 +0000 (20:57 +0200)]
localtime 1.76

4 years agolocaltime 1.75
Corinna Vinschen [Tue, 28 Apr 2020 18:56:16 +0000 (20:56 +0200)]
localtime 1.75

4 years agolocaltime 1.74
Corinna Vinschen [Tue, 28 Apr 2020 18:50:57 +0000 (20:50 +0200)]
localtime 1.74

4 years agolocaltime 1.73
Corinna Vinschen [Mon, 27 Apr 2020 09:21:00 +0000 (11:21 +0200)]
localtime 1.73

4 years agoCygwin: localtime.cc: reformat for easier patching
Corinna Vinschen [Mon, 27 Apr 2020 09:13:05 +0000 (11:13 +0200)]
Cygwin: localtime.cc: reformat for easier patching

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: add release message for fixed floppy bugs
Corinna Vinschen [Fri, 24 Apr 2020 14:39:37 +0000 (16:39 +0200)]
Cygwin: add release message for fixed floppy bugs

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: raw disk I/O: lock floppys as well
Corinna Vinschen [Fri, 24 Apr 2020 14:22:26 +0000 (16:22 +0200)]
Cygwin: raw disk I/O: lock floppys as well

The workaround to access the full disk required since Vista
and described in http://support.microsoft.com/kb/942448
(NOT ACCESSIBLE at the time of writing this commit message)
is required on floppy drives as well.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: raw disk I/O: Fix return value in error case
Corinna Vinschen [Fri, 24 Apr 2020 14:19:09 +0000 (16:19 +0200)]
Cygwin: raw disk I/O: Fix return value in error case

The cast to generate the return value uses a DWORD variable
as test and set value.  The error case is the constant -1.
Given the type of the other half of the conditioal expression,
-1 is cast to DWORD as well.

On 64 bit, this results in the error case returning a 32 bit
-1 value which is equivalent to (ssize_t) 4294967295 rather
than (ssize_t) -1.

Add a fixing cast.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: file I/O: make sure to treat write return value as ssize_t
Corinna Vinschen [Fri, 24 Apr 2020 14:14:43 +0000 (16:14 +0200)]
Cygwin: file I/O: make sure to treat write return value as ssize_t

The return type of fhandler write methods is ssize_t.  Don't
use an int to store the return value, use ssize_t.  Use ptrdiff_t
for the buffer size.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: accounts: Report unrecognized db_* nsswitch.conf keywords
David Macek via Cygwin-patches [Mon, 20 Apr 2020 17:21:15 +0000 (19:21 +0200)]
Cygwin: accounts: Report unrecognized db_* nsswitch.conf keywords

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: accounts: Don't keep old schemes when parsing nsswitch.conf
David Macek via Cygwin-patches [Mon, 20 Apr 2020 17:21:00 +0000 (19:21 +0200)]
Cygwin: accounts: Don't keep old schemes when parsing nsswitch.conf

The implicit assumption seemed to be that any subsequent occurence of
the same setting in nsswitch.conf is supposed to rewrite the previous
ones completely.  This was not the case if the third or any further
schema was previously defined and the last line defined less than that
(but at least 2), for example:

```
db_home: windows cygwin /myhome/%U
db_home: cygwin desc
```

Let's document this behavior as well.

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: accounts: Unify nsswitch.conf db_* defaults
David Macek via Cygwin-patches [Tue, 21 Apr 2020 18:31:09 +0000 (20:31 +0200)]
Cygwin: accounts: Unify nsswitch.conf db_* defaults

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: Add David Macek to CONTRIBUTORS
Corinna Vinschen [Tue, 21 Apr 2020 08:38:57 +0000 (10:38 +0200)]
Cygwin: Add David Macek to CONTRIBUTORS

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: symlinks: fix WSL symlink creation if cygdrive prefix is /
Corinna Vinschen [Tue, 21 Apr 2020 08:31:53 +0000 (10:31 +0200)]
Cygwin: symlinks: fix WSL symlink creation if cygdrive prefix is /

If the cygdrive prefix is /, then the following happens right now:

  $ ln -s /tmp/foo .
  $ ls -l foo
  lrwxrwxrwx 1 user group 12 Apr 15 23:44 foo -> /mnt/tmp/foo

Fix this by skipping cygdrive prefix conversion to WSL drive
prefix "/mnt", if the cygdrive prefix is just "/".  There's no
satisfying way to do the right thing all the time in this case
anyway.  For a description and the alternatives, see
https://cygwin.com/pipermail/cygwin-developers/2020-April/011859.html

Also, fix a typo in a comment.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agocygheap_pwdgrp: Handle invalid db_* entries correctly
David Macek via Cygwin-patches [Thu, 16 Apr 2020 21:09:07 +0000 (23:09 +0200)]
cygheap_pwdgrp: Handle invalid db_* entries correctly

If the first scheme in db_* was invalid, the code would think there
were no schemes specified and replace the second scheme with
NSS_SCHEME_DESC.

Signed-off-by: David Macek <david.macek.0@gmail.com>
4 years agoCygwin: faq: disable outdated "sshd in domain" faq
Corinna Vinschen [Tue, 14 Apr 2020 11:26:37 +0000 (13:26 +0200)]
Cygwin: faq: disable outdated "sshd in domain" faq

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoproc_cpuinfo: Add PPIN support for AMD
Brian Inglis [Sat, 11 Apr 2020 04:35:28 +0000 (22:35 -0600)]
proc_cpuinfo: Add PPIN support for AMD

Newer AMD CPUs support a feature called protected processor
identification number (PPIN). This feature can be detected via
CPUID_Fn80000008_EBX[23].

4 years agoCygwin: utils: override definition of PMEM_EXTENDED_PARAMETER
Corinna Vinschen [Tue, 7 Apr 2020 16:54:59 +0000 (18:54 +0200)]
Cygwin: utils: override definition of PMEM_EXTENDED_PARAMETER

PMEM_EXTENDED_PARAMETER is defined in the local winlean.h as long
as mingw-w64 doesn't define it (in winnt.h).  ntdll.h needs the
definition for declaring NtMapViewOfSectionEx.  cygpath.cc and ps.cc
both include ntdll.h but not winlean.h, so they complain about the
missing definition.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: mmap_alloc: fix comment to document using the extended memory API
Corinna Vinschen [Tue, 7 Apr 2020 12:17:04 +0000 (14:17 +0200)]
Cygwin: mmap_alloc: fix comment to document using the extended memory API

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: threads: use extended memory API if available
Corinna Vinschen [Tue, 7 Apr 2020 15:41:05 +0000 (17:41 +0200)]
Cygwin: threads: use extended memory API if available

So far Cygwin was jumping through hoops to restrict memory
allocation to specific regions.  With the advent of VirtualAlloc2
and MapViewOfFile3 (and it's NT counterpart NtMapViewOfSectionEx),
we can skip searching for free space in the specific regions
and just call these functions and let the OS do the job more
efficiently and less racy.

Use VirtualAlloc2 on W10 1803 and later in thread stack allocation.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
4 years agoCygwin: mmap: use extended memory API if available
Corinna Vinschen [Tue, 7 Apr 2020 12:16:09 +0000 (14:16 +0200)]
Cygwin: mmap: use extended memory API if available

So far Cygwin was jumping through hoops to restrict memory
allocation to specific regions.  With the advent of VirtualAlloc2
and MapViewOfFile3 (and it's NT counterpart NtMapViewOfSectionEx),
we can skip searching for free space in the specific regions
and just call these functions and let the OS do the job more
efficiently and less racy.

Use the new functions on W10 1803 and later in mmap.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This page took 0.07065 seconds and 5 git commands to generate.