The Racket repository
Go to file
Matthew Flatt 2d0f10f473 rktio: better behavior for opening write and of fifo
When opening the write end of a fifo that doesn't have a reader
already, the old implementation could allow writing bytes that are
discarded. This new implementation uses a blocking `open` in a
`pthread`, and that way the write routines know whether the stream is
ready for writing or not.

The difference is visible in the Racket API in a two places:
`subprocess` needs to wait until a fifo writer is connected before
attempting to dup the corresponding file descriotor, and more
generally a use of `unsafe-port->file-descriptor` needs to wait. The
former blocking operation is now build into `subprocess` (and
documented), but the burden is place on callers of
`unsafe-port->file-descriptor` to wait is necessary.

The new `port-waiting-peer?` predicate exposes the waiting state,
while `sync` is sufficient to wait for a peer.

Closes #2784
2019-08-22 05:14:58 -06:00
.github Create FUNDING.yml 2019-05-24 12:09:34 -04:00
.gitlab Add --disable-generation targets to emulated archs 2019-06-03 22:51:51 +02:00
pkgs rktio: better behavior for opening write and of fifo 2019-08-22 05:14:58 -06:00
racket rktio: better behavior for opening write and of fifo 2019-08-22 05:14:58 -06:00
.gitattributes Don't include git files in archives. 2010-05-12 01:46:05 -04:00
.gitignore Fix typo. 2019-06-21 12:32:37 -05:00
.gitlab-ci.yml Remove native x86_64 test run 2019-07-31 14:39:13 +02:00
.mailmap mailmap updates & fixes. 2013-04-03 18:10:22 -04:00
.travis.yml don't expect Racket CS failures on Travis 2019-07-03 06:24:43 -06:00
appveyor.yml use VS 2013 on AppVeyor 2018-05-15 11:07:06 -06:00
azure-pipelines.yml Add mac tests on Azure. 2018-09-15 12:43:54 -04:00
INSTALL.txt note about installers-from-built makefile target 2019-07-18 08:13:46 -04:00
Makefile makefile: avoid git submodule update in cs-as-is 2019-06-22 08:01:12 -06:00
README.md reorganize and update "README.txt"s about sources and builds 2018-11-16 07:49:53 -07:00

This is the source code for the core of Racket. See "INSTALL.txt" for full information on building Racket.

To build the full Racket distribution from this repository, run make in the top-level directory. To build minimal Racket, run make base.

The rest of the Racket distribution source code is in other repositories, mostly under the Racket GitHub organization.

Contribute to Racket by submitting a pull request, joining the development mailing list, or visiting the IRC channel.

License

Racket is distributed under the GNU Lesser General Public License (LGPL). This implies that you may link Racket into proprietary applications, provided you follow the rules stated in the LGPL. You can also modify Racket; if you distribute a modified version, you must distribute it under the terms of the LGPL, which in particular states that you must release the source code for the modified software.

See racket/src/COPYING_LESSER.txt for more information.