Skip to content

Conversation

@pull
Copy link

@pull pull bot commented May 18, 2022

See Commits and Changes for more details.


Created by pull[bot]

Can you help keep this open source service alive? 💖 Please sponsor : )

mflatt and others added 27 commits July 26, 2025 10:08
Normally, `check-for-break` is not reached in atomic mode, but
explicit calls can be inserted by `parameterize-break`, for example.
The `--force-strip` flag implies a subset of `--force` behavior that
relates only to source versus built versus binary mismatches. The flag
is needed to bridge a mismatch for adding missing packages to a
source-distribution build on Windows, Mac OS, or natipkg Linux.
Distinguish the custodian lock from atomic mode, change file ports to
use the custodian lock as needed instead of atomic mode, split the
rktio lock into sleep-relevant and other, and remove the atomicity
requirement for (internally) pushing/popping kill callbacks on
threads, repair logging synchronization, and miscellaneous clean up.
A callback during the scheduler's own sleeping function runs in a
context where there is no current thread.

Closes racket/drracket#762
Also repair `tcp-accept-evt` to use the right custodian, and fix
`#%pthread` inlines in "thread" and "io".
Allow reading bytes, writing bytes, checking existence, and listing
directories without requiring a place-wide rktio lock. This change
sets up a pattern that can be applied to more parts of rktio, making
it able to incrementally support more fine-grained parallelism.
Using `SO_KEEPALIVE` on TCP ports makes network communication much
slower on Mac OS. The reason is not clear, but for now, it makes the
most sense to revert back to not using `SO_KEEPALIVE` on Mac OS.
Even when futures and places disabled, `processor-count` now returns
the value that would be returned if futures and places were supported.
This brings BC in line with CS, and it means that `racobc setup` will
use process-based parallelism by default on AArch64 Mac OS. That's
useful, in turn, to avoid timeouts in tests (like
"unix-installer-test.rkt" in "distro-build") that have been
historically run on x86_64 and expect a reasonably fast setup phase.
Replace a non-atomic `vector-copy!` with an atomic `box-cas!` to avoid
a race among threads (especially parallel ones).
Internally, `make-base-namespace` can trigger changes (such as forcing
instantiations) in the initial namespace, so take its registry lock.
Like some other problems exaposed by parallel threads, this one
was broken for coroutine threads, too.
Also, remove outdated "FIXME" in "foreign-test.rktl".
In the case of waiting for an output port to be flushed, the port lock
wasn't being taken as it should be. In some other cases, more locks
were taken than needed, or there were rednudant checks where an
earlier implementation had released and reacquired a lock.
An immobile cell's addresss might flow into a place that claims not to
be GCable and then back to `free-immobile-cell`, which did not handle
those pointers correctly. This became broken with
8c586f9.

The JPEG encoder ran into this problem, but the main effect is an
extremely slow leak.

Also, clean up locking of struct results from foreign calls, which are
not necessarily allocated as GCable.
mflatt and others added 30 commits January 5, 2026 06:47
Internally, this change adds a `file-has-signature?` function to
`compiler/private/mach-o` that isn't used, after all. I've wanted this
function enough times to keep it, anyway.

Related to #5413
Also, use it in "class-internal.rkt".
The `object=?` and `object-or-false=?` functions involve checking for
an impersonator property via `has-original-object?`. It turns out that
impersonator-property predicates are slow. They could be made faster,
but for now, add an `inspector?` guard, which is cheap and covers the
comon case than an object is not impersonated.

Related, make `object?` a little faster by basing it on a struct-type
predicate instead of a struct-type property predicate. Using the
struct-type property was important in the distant past when classes
could be derived from existing structure types, but this functionality
has not been documented or used for a long time, and it seems safe to
stop supporting it.
Support HTTP Basic authentication for proxy servers when using
CONNECT tunnels for HTTPS or Git URLs. Credentials can be specified
in proxy environment variables using the standard URL format:
http://user:password@proxy-host:port

Note: this changes the contents of `current-proxy-servers` to be
a list of 4-element lists instead of 3-element lists. The parameter
guard will coerce 3-element lists to have the needed 4th element.
Macro-introduced module-level bindings that end up being the only
binding in the defining module (or, more likely, the only relevant
binding after an earlier round of pruning via compilation) could get
dropped.

The problem was exposed by compiling Rhombus with the `LogReceiver`
addition, where a reference to `sync5` (from the expansion of
`Evt.sync`) was lost.
* add char-indic-break-property
* turn `grapheme-char-step` into a table lookup
* move $char-extended-pictographic? to unicode-char-cases
it seems like there can be some complex thread switching that can get
this thread-cell to still have #f in it, even after update-cache has
been called, and (even worse) control can enter the function that
dereferences the thread cell and cause an application of #f.  Avoid
that possibility by not looking at the thread cell in the body of the
function
The threshold needs to be a bit higher to avoid failing.
The internal `expand-for-clause` function changed to expect an extra
argument, and I missed that it's exported and used by public
functions.

The new extra argument lazily indicates whether flattening
`in-parallel` is ok. Flattening is not ok at the `for` level when the
new `#:on-length-mismatch` clause is used. Still, sending `(lambda ()
keeps expansions the same, and it seems right for the two uses of
`expand-for-clause` in registered packages. It's possible that we'll
want to expose the ability to choose, but this commit is intended as a
minimal repair.
When `rktio_sleep` is called with a submillisecond timeout and the
`poll` system interface is being used, then `rktio_sleep` could return
too soon, because `poll` takes a timeout in miliseconds. To avoid
that, in the case that `poll` returns immediately with nothing ready,
add a `nanosleep` call.

This change addresses an occassional failure on Linux in a stress test
that is meant check for execessive polling at the Racket scheduler
level.
Allowing port reuse may avoid an "Address already in use" error.
Avoid a test failure frmo trying to use the same port as
`openssl s_server`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.