Commit Graph

4462 Commits

Author SHA1 Message Date
Matthew Flatt
9951efc891 cs: fix unsafe-thread-at-root to use the root custodian
Otherwise, a finalization thread can get shut down, resulting in a
leak.
2019-05-03 15:00:33 -06:00
Matthew Flatt
ef1004fdc0 cm: fix lock
Commit 70e0cac062 neglected to use `#:for-lock? #t` as intended.
2019-05-03 12:57:58 -06:00
Matthew Flatt
f52fdfdd6e expander: preserve inlining annotations in machine-independent bytecode 2019-05-03 10:36:42 -06:00
Matthew Flatt
920c899ba8 thread: adjust use of later will executor for custodian
The use of a will executor for a custodian is a bit of a hack, and it
doesn't want the "keep live until executed" constraint. So, add an
optional internally.
2019-05-03 06:28:25 -06:00
Matthew Flatt
e13fac3ccf foreign: document internal make-late-will-executor
Also, rename from "stubborn" to "late" internally to be more
consistent and avoid overloading "stubborn" in the allocator.
2019-05-03 06:20:11 -06:00
Matthew Flatt
032479cf2c keep late will executors live with pending wills
If a late will executor has pending will, then it needs to stay
live until the enclosing place has terminated (and post-custodian
callbacks are run). Otherwise, `ffi/unsafe/alloc` can lose values
that it expects to finalize, and it reports an "internal error".

The late will executor for `register-finalizer` from `ffi/unsafe`
was kept live in traditional Racket, but only as an accident of
custodian shutdown in a terminating place: the shutdown process skips
threads, since that work is technically not necessary. Relying on that
coincidence is asking for trouble, though, so implement retention more
deliberately.
2019-05-03 05:39:15 -06:00
Matthew Flatt
358764faac cs: fix retention of late will executors
A late will executor must stay live as long as it has finalizations
registered.
2019-05-03 05:38:54 -06:00
Matthew Flatt
8f5f0a4330 cs: implement foreign-call locks 2019-05-02 20:09:43 -06:00
Matthew Flatt
d5243820f6 cs & schemify: faster ptr-ref and ptr-set! on primitive types
Recognize `(ptr-ref <ptr> _uint8)`, etc., and turn it into a more
direct `(ptr-ref/uint8 <ptr>)`, etc. This improvement speeds PNG
loading by a factor of 10 to 20, for example, because the
implementation expects the pattern to be recognized.
2019-05-02 17:31:40 -06:00
Ben Greenman
a13070f302 racket/contract: improve fast-append
test whether the 2nd arg is null once, rather than N times
2019-05-02 11:35:55 -04:00
Ben Greenman
721ef2050f racket/contract: move comment
Move a comment closer to the code it talks about
2019-05-02 11:35:55 -04:00
Matthew Flatt
5b929a7621 io: fix port custodian unregister
Make unregister match the register change in 11789ff8b0.
2019-05-02 07:26:20 -06:00
Matthew Flatt
651fc3ae5e ffi/unsafe/com: use ffi/file instead of C API 2019-05-01 14:43:36 -06:00
Matthew Flatt
92c12de018 cs: implement prop:exn:srclocs in exn:fail:read 2019-05-01 14:43:36 -06:00
Matthew Flatt
fb968db7a5 cs & thread: detect plumber-flush errors on place exit 2019-05-01 13:46:46 -06:00
Matthew Flatt
cfeef54a28 cs & threads: run post-custodian shutdown actions on place exit 2019-05-01 13:22:47 -06:00
Matthew Flatt
193bec6b7d cs & threads: more place-message repairs for graphs 2019-05-01 09:24:39 -06:00
Matthew Flatt
9268dcaad3 cs: better handling for contended hash-table locks
When the number of places approaches the number of available
processing cores, then a spin lock isn't good enough for a small
number of contended hash tables (maybe just one of them). When
contention is discovered, fall back to a mutex-based lock.
2019-05-01 09:24:39 -06:00
Alexis King
1101461434 rktio: Make sure not to close subprocess standard in/out/err
When spawning a new subprocess, it's possible that one or more of the
new process's standard input, output, or error descriptors use file
descriptor 0, 1, or 2, even if they don't correspond to any of the
parent process's original standard input, output, or error descriptors.
This can happen if the parent process closes one of its standard
descriptors, and the operating system reuses the file descriptor number
for a new descriptor.

Therefore, be more careful about closing and copying file descriptors in
the child process before calling `exec`. Specifically, move file
descriptors out of the way as needed so they aren't clobbered, and
accommodate cases where multiple standard streams may share the same
file descriptor in the parent process.

fixes #2634
2019-05-01 09:10:33 -05:00
Matthew Flatt
f3de3e4584 cs & threads: repairs for places
Includes a repair for handling vectors and prefab structs that are
involved in cycles.
2019-04-30 20:28:38 -06:00
Matthew Flatt
635c64e8bb racocs make: repair --no-deps destination 2019-04-30 19:00:52 -06:00
Matthew Flatt
1de69c4d37 cs & thread: repair retention of subcustodians
A subcustodian was incorrectly registered as weak for its parent,
which means that an unreferenced custodian could get lost when
shutting down an ancestor.
2019-04-30 18:10:17 -06:00
Matthew Flatt
dcb0f422a9 cs & io: fix shared byte strings over place channels 2019-04-30 17:46:10 -06:00
Matthew Flatt
f5836d7a30 racket/rerequire: repair for Racket CS 2019-04-30 17:46:10 -06:00
Matthew Flatt
5f53c91c6e cs: repair make-sibling-inspector 2019-04-30 17:46:10 -06:00
Matthew Flatt
164442ab26 fix place-message-allowed? on an empty vector 2019-04-30 17:46:10 -06:00
Matthew Flatt
436f3d8f64 io: fix handling of sharing in place messages 2019-04-30 17:46:10 -06:00
Matthew Flatt
11789ff8b0 io: fix socket/fd port custodian registration
Register the port, not the file descriptor, especially since a TCP
connection can have ports that share a file descriptor. Also, I think
a weak reference in the custodian doesn't work as intended (visible
through finalization) if the file descriptor is referenced with a
callback that closes over the port.
2019-04-30 14:40:17 -06:00
Matthew Flatt
cf08436e05 cs: fix custodian shutdown of TCP to use shutdown
In other words, send an EOF over TCP on custodian shutdown.
2019-04-30 14:40:17 -06:00
Matthew Flatt
258fb8fafd cs: use print-as-expression in default print handler 2019-04-30 14:40:17 -06:00
Matthew Flatt
a3fcaf92df racket/class: remove excessive syntax-protect
No `syntax-protect` is needed for `define/private`, etc., because no
new identifiers or expressions are introduced. Adding extra dye packs
can interfere with other macros that pull apart syntax (although maybe
the macros shouldn't do that without using `syntax-disarm`).
2019-04-30 09:07:59 -06:00
Matthew Flatt
dd22b8b599 io: correct custodian assumption
A custodian doesn't provide any order on shutting down the objects
that it manages (I was confused about some past experiments), so
avoid that assumption.
2019-04-29 17:39:24 -06:00
Matthew Flatt
b3b240ebc7 rktio: correct problem with change to growable poll set 2019-04-29 16:09:48 -06:00
Matthew Flatt
c4f44eaedd cs: fix cross-build bootstrap
Fix the relevant makefile target.
2019-04-29 13:29:09 -06:00
Matthew Flatt
bd5677da70 Revert "cs: fix cross-build bootstrap"
This reverts commit e13fcd6226.

Wasn't the right change, because the modified targets aren't used for
a cross build.
2019-04-29 13:29:09 -06:00
Ryan Culpepper
77a54c1af6
ffi-lib: log success, log failures with candidates tried (#2566) 2019-04-29 16:52:23 +02:00
Matthew Flatt
535bfcb0c3 cs: repair shared poll set initialization
Esspecially affects filesystem change events on Mac OS and BSDs.
2019-04-29 07:41:11 -06:00
Matthew Flatt
5c7d7aae68 rktio: fix fd leak in filesystem-change-evt with kqueue
Affects Mac OS and BSDs.
2019-04-29 07:41:11 -06:00
Ryan Culpepper
cbfaf428d2 syntax/parse: add describe frame if opaque even if no description
fixes #2627

Also fix a bug where eh-alternatives were mistakenly marked opaque.
2019-04-29 09:00:19 +02:00
Matthew Flatt
8f0fb72160 repair chaperone handling in potential place messages
Closes #2630
2019-04-28 10:27:34 -05:00
Matthew Flatt
e13fcd6226 cs: fix cross-build bootstrap 2019-04-27 19:53:21 -05:00
Ben Greenman
1a4192f697
typo: reword install/clone error message (#2609) 2019-04-27 11:43:21 -04:00
Alexis King
930046e729 wrap-expr/c: Add #:phase argument to control phase of introduced syntax
closes #2455
2019-04-26 12:34:27 -05:00
Ryan Culpepper
1481f3e8d9 sqlite3: fix reporting of insert-id 2019-04-26 13:35:08 +02:00
Matthew Flatt
8d77b8403c cs-boostrap: repairs to work in Racket CS 2019-04-25 20:45:42 -06:00
Matthew Flatt
01eec4ef9a expander: more reserved names to accomodate schemify
Compiling the Chez Scheme bootstrap library in Racket on Chez Scheme
is a good way to discover missing reserved symbols.
2019-04-25 20:04:14 -06:00
Matthew Flatt
c59ba15522 cs: unbreak async foreign callbacks
Adds a changed missed in 1624193210.
2019-04-25 19:52:00 -06:00
Matthew Flatt
776996fe24 cs: implement unsafe-{file-descriptor,socket}->semaphore
Use `unsafe-{file-descriptor,socket}->semaphore` internally to
make scheduling scalable for threads blocked on sockets, like
traditional Racket.
2019-04-25 19:29:33 -06:00
Matthew Flatt
05fe76f49a repair module name resolver
Revert an accidental change in 2d3ee903ec.
2019-04-25 17:19:47 -06:00
Matthew Flatt
2d3ee903ec cs: implement filesystem change events 2019-04-25 16:12:01 -06:00
Matthew Flatt
20672cd60a make Chez Scheme bootstrap work as a "cs-bootstrap" package 2019-04-25 10:09:26 -06:00
Matthew Flatt
1624193210 reduce overhead and precision of per-thread cpu times
Getting the current CPU time is relatively expensive, so get it only
on thread swaps where a thread used its full quantum or 1/100 swaps
otherwise. This approximation should work because thread-specific CPU
times are rarely requested, and they make the most sense for threads
that don't constantly swap out due to synchronization.
2019-04-25 08:23:32 -06:00
Matthew Flatt
84deff1d02 cs: more explicit handling of acessor/mutator errors
Formerly, an expression like `(arity-at-least-value 7)` could crash,
because the `arity-at-least-value` accessor is created in unsafe mode,
and the slow path to accessor errors attempted to use the accessor to
provoke an error message. Instead of using a potentially unsafe
accessor, have the slow path raise an error explicitly with
`raise-argument-arror`. That change has the added benefit of making
error messages mach traditional Racket (at least for structure types
that are not declared as "authentic").

The problem was exposed by tests added in 55dcdf5538.
2019-04-24 16:50:49 -06:00
Matthew Flatt
a600991ff7 cs: fix typo in error-message constructor 2019-04-24 15:42:26 -06:00
Matthew Flatt
92e937032d cs: repair number->string on most negative fixnum 2019-04-24 15:40:58 -06:00
Matthew Flatt
fa1861869e cs: use continuation marks for module context
Instead of a separate hash table mapping continuations to
linklet-instance names, use a continuation mark. That's faster,
because capturing a continuation means copying part of it on continue.
2019-04-24 15:05:46 -06:00
Matthew Flatt
688f03e208 cs: avoid some hashtable overhead during linklet instantiation 2019-04-24 12:54:38 -06:00
Matthew Flatt
a0b1791a9d declare deserializaton helper linklet as consistent
Declaring as consistent avoids some application indirections on Racket
CS, for example.
2019-04-24 12:33:00 -06:00
Matthew Flatt
42009925dc cs: reduce allocation on linklet instantiation
Avoid some closure creations and `append`s. The performance
improvement is very small, but measurable.
2019-04-24 11:03:04 -06:00
Matthew Flatt
d69f5cf00f cs: restore cross-module optimization
A backwards `if` in a7988c3813 disabled cross-module optimization.
2019-04-24 10:39:05 -06:00
Matthew Flatt
20e669f478 adjust local-require to help Check Syntax
Currently, Check Syntax has trouble correlating `require` forms and
references to imports that go through a macro-introduced rename
transformer. For example, there's no binding arrow from the final
`starting` to the `racket/list` in

 #lang racket/base
 (require (for-syntax racket/base))

 (define-syntax-rule (define-as-first mod starting)
   (begin
     (require (only-in mod
                       [first initial]))
     (define-syntax starting (make-rename-transformer #'initial))
     starting))

 (define-as-first racket/list starting)
 starting

But change the last two `starting`s to `initial`, and the binding
arrows work.

Until a general repair is in place for Check Syntax, this commit
adjusts 38d612dba6 to use the original export name for an immediate
binding, which acts as a hint to the current Check Syntax
implemenration.
2019-04-24 07:59:06 -06:00
Philip McGrath
c838d01c09 typo: inatll -> install 2019-04-24 06:12:19 -06:00
Matthew Flatt
31101c57db bytecode compiler: fix coordinate problem in letrec check
Example provided by Jay
2019-04-23 18:19:42 -06:00
Alexis King
72ab50a993 Establish free-id=? equivalences in intdefs with local bindings in scope
fixes #2594
2019-04-22 22:50:16 -05:00
Alexis King
38d612dba6 local-require: Remove last remaining use of syntax-local-get-shadower 2019-04-22 22:49:14 -05:00
Matthew Flatt
701a86b863 source "README.txt" corrections related to Racket CS builds 2019-04-22 19:06:24 -06:00
Matthew Flatt
e001f3b3cb include ChezScheme sources in a source distribution
Note that the source-distribution client must have a
"build/ChezScheme" checkout created, maybe by building as a 'cs
variant. A pruned version of that checkout is then included with other
sources. The resulting source distributon then works for building
either Racket variant.

Adapt the configure scripts and makefiles to use a "ChezScheme"
directory that is bundled with sources.
2019-04-22 16:56:17 -06:00
Matthew Flatt
21ad81b4fc cs bootstrap: move struct declaration to centralized module
Keep together declarations that need to match the Chez Scheme
implementation.
2019-04-22 07:24:38 -06:00
Gustavo Massaccesi
55dcdf5538 fix jit-inlining of struct primitives
Some expressions like (date-day) gave usually an arity error, but when they
were inlined by the JIT the arity check was wrong, so they produce a segfault
or a nonsensical result.
2019-04-20 20:09:57 -03:00
Matthew Flatt
4b586eeadf cs: faster Chez Scheme bootstrap
Improve record encoding to make it more exposed to the compiler.
2019-04-20 13:27:02 -06:00
Matthew Flatt
8c8979369f cs: switch Chez Scheme download to racket/ChezScheme at GitHub 2019-04-20 08:32:36 -06:00
Matthew Flatt
e2de99f0b9 cs: adjust build to use Racket bootstrap of Chez Scheme 2019-04-20 08:25:20 -06:00
Ben Greenman
f26b793e9a recursive contract: add else-branch to a cond
Raise an exception if none of the other cases match, instead of
returning `(void)` where a contract is expected
2019-04-19 20:43:44 -05:00
Matthew Flatt
e337c65204 implement bootstrap of Chez Scheme using Racket
Provide a way to build Chez Scheme from source using Racket. In the
short run, this lets us distribute source that ultimately depends only
on a C compiler (since a variant of Racket can be built from source
using just a C compiler).
2019-04-19 13:45:50 -06:00
Matthew Flatt
7e9d167101 expander: fix namespace-require/copy for some require specs 2019-04-19 13:44:14 -06:00
Ben Greenman
6d7550125f typo: change error messages for vectorof contract
- change an 'an' to 'a'
- remove 'immutable' where expecting either mutable or immutable (don't
  bother to specify which, because `vector-common.rkt` doesn't bother)
- remove extra ','
2019-04-18 07:15:08 -05:00
Matthew Flatt
e1ad8d4721 cs: fix path on discovered Chez Scheme library name
Corrects 8a368cac99.
2019-04-12 06:56:07 -06:00
Matthew Flatt
615677299e switch Mac OS back from poll to select
The `poll` system call doesn't work right for fifos, so switch
back to `select`, but use a new strategy to size fd_set buffers
instead of trying to use `getdtablesize` (because the result
of `getdtablesize` can change dynamically on Mac OS).

Also, add a check for input at the rktio level when trying to read
from devices other than regular files. Otherwise, Racket CS (which
doesn't have some redundant polling that is in traditional Racket)
sees spurious EOFs for unconnected fifos.

Closes #2577
2019-04-10 12:34:40 -06:00
Matthew Flatt
4c53b514cf cs: correction on compiler flags for object-name
Repairs a mistake in 40b8b5c675.
2019-04-10 07:55:24 -06:00
Matthew Flatt
8a368cac99 cs: fix discovery of Chez lib name on Windows 2019-04-10 07:52:11 -06:00
Paulo Matos
9e8b9d8959
Remove value store in ready_pos but unread (#2588)
* Remove value store in ready_pos but unread

* Move declaration of ready_pos to where it is used

* Make discard of return value of tcp_check_accept explicit

* Split declaration and var assignment to comply with xform
2019-04-10 14:14:57 +02:00
Paulo Matos
5a3d7b87e4
Remove dead assignment to ch (#2589)
Remove dead assignment to ch and make discard return value explicit
2019-04-10 08:37:37 +02:00
Paulo Matos
2919d21d1d
Remove dead assignment to target_offset (#2590) 2019-04-10 08:34:06 +02:00
Paulo Matos
93224561f8
Fix --enable-cify option (#2598)
I guess, a previous copy-paste AC_ARG_ENABLE meant that cify never had
its own option.
2019-04-10 08:32:52 +02:00
Matthew Flatt
40b8b5c675 expander extract: improve pure-function analysis
Improve the analysis enough to handle changes to
`make-keyword-procedure` (in 47467a1dba) and restore the Racket CS
build.
2019-04-09 16:12:31 -06:00
Gustavo Massaccesi
9f9b3f4443 cs: fix check of Chez Scheme version
Merge to v7.3
2019-04-09 18:03:57 -03:00
Matthew Flatt
ef49ccf87a cs: fix chaperone-struct on accessor/mutator taking a position
Closes #2570
2019-04-09 11:53:27 -06:00
Matthew Flatt
247c985702 cs: faster (current-memory-use 'cumulative)
A slow `(current-memory-use 'cumulative)` could causes misleading
results in `PLT_EXPANDER_TIMES` output for frequent actions.
2019-04-09 11:53:27 -06:00
Matthew Flatt
d61f56c77f cs: imprve fixnum hashing
Avoid collision for 0 and -1, for example.
2019-04-09 11:53:27 -06:00
Matthew Flatt
cc45dc044d cs: faster number->string on fixnums 2019-04-09 11:53:27 -06:00
Alexis King
1bf416a776 Make equal? on classes and objects see through class contracts
Making `equal?` do the right thing on classes turned out to be easy---it
just involved adding a straightforward `prop:equal+hash` property to the
`class` struct—but making it work properly for *objects* was the tricky
part. The trouble is that `equal?` on objects that don’t implement the
`equal<%>` interface is just ordinary structure equality, which can be
relevant if objects are inspectable. Writing `(inspect #f)` in a class
body is like making a struct `#:transparent`, and it has all the same
ramifications for equality.

The trouble is that `class/c` creates new wrapper classes, and every
class has its own struct type. Since the default behavior of `equal?` on
structs is to *never* be equal to structs of different types, even
subtypes, an object created from a contracted class can never be
`equal?` to an object created from the same class without contracts.

The solution is to add a `prop:equal+hash` property to `object%` itself
that emulates the default behavior of `equal?`, but sees through class
contract wrappers. Since struct type properties are inherited by
subtypes, this property will be present on all objects, and it only
needs to be attached once.

fixes #2279
2019-04-09 12:27:27 -05:00
Alexis King
47467a1dba Avoid creating procedures with internal source locations as names
Mainly, this improves `make-keyword-procedure`: when applied to a single
argument, it now uses `procedure-rename` to ensure the resulting
procedure has the appropriate name. A couple other changes also guard
against the case where a lambda expression has no inferred name and no
source locations information, which would lead to the source locations
in the implementation being used, instead.
2019-04-09 12:27:11 -05:00
Matthew Flatt
0d2dd8f578 cify: fix multiple-value return where braces are needed
Merge to v7.3
2019-04-08 13:15:19 -06:00
John Clements
5ce11626ef Post-release version for the v7.3 release 2019-04-08 10:55:30 -07:00
Paulo Matos
b9b6d97b30
Make second argument of scheme_os_getcwd a size_t (#2584)
By being an unsigned type, we ensure that when 0 is passed we know
that there's no smaller number. This aids the static analyzer.
2019-04-08 17:25:43 +02:00
Matthew Flatt
e6aef1093b expander: fix submodule order nondeterminism
The nondeterminstic order could lead to a mismatch that caused
Racket CS to crash on submodule tests.
2019-04-08 07:23:47 -06:00
Matthew Flatt
d87be8789e cs: use new $record-ref, etc., primitive
Also, speed up hashing and logging a little by adjusting semaphores to
succeed with `$record-cas!` when no waiting is necessary.
2019-04-08 11:13:01 +02:00
Matthew Flatt
39c67f8b6a cs: require Chez Scheme 9.5.3 2019-04-07 10:32:55 +02:00
Matthew Flatt
5a638073eb cs: avoid abuse of vector-ref for struct-ref
Use `$object-ref`, instead. Otherwise, cptypes can detect the abuse of
`#3%vector-ref` and make unwanted transformations.
2019-04-07 10:24:54 +02:00
Matthew Flatt
d8125082a2 cs: improve hash-code mixing 2019-04-07 10:24:54 +02:00