Age | Commit message (Collapse) | Author |
|
* john/erts/fix-binary-append-syslimit/OTP-14524:
Check for overflow when appending binaries, and error out with system_limit
# Conflicts:
# erts/emulator/test/bs_construct_SUITE.erl
|
|
This fixes the following bug:
A = <<0:((1 bsl 32)-8)>>,
B = <<2, 3>>.
B =:= <<A/binary,1,B/binary>>. %% Evaluated to true...
|
|
* sverker/big-bxor-bug/ERL-450/OTP-14514:
erts: Fix bug in bxor of a big negative number
|
|
Wrong result for
(X bsl WS) bxor Y.
where
X is any negative integer
Y is any integer that does not require more words than X
WS is erlang:system_info(wordsize) or larger
Fix: The subtraction of 1 (for 2-complement conversion)
must be carried along all the way to the last words.
|
|
into maint-20
* lukas/erts/fix_outputv_port_task_cleanup/ERL-428/OTP-14481:
fixup! erts: Cleanup dropped port tasks correctly
erts: Add tests to detect port close race
erts: Cleanup dropped port tasks correctly
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Add z_SUITE:leaked_processes/1 to print the process information for
all new processes created during execution of the emulator test
suite. Test cases are not supposed leak processes, because that
could disturb later test cases.
|
|
|
|
|
|
|
|
|
|
Add enif_whereis_pid() and enif_whereis_port() functions
OTP-14453
|
|
* rickard/purge-hibernated-20:
Update testcase to check that purge handle hibernated process correct
Do not GC hibernated process from other processes
Fix check_process_code() on hibernated process
|
|
* bjorn/cuddle-with-tests:
Stabilize call_with_huge_message_queue/1
same_time_yielding/1: Avoid failing if there are many schedulers
Remove obsolete old_scheduler_SUITE
Robustify process_SUITE:spawn_opt_max_heap_size/1
Contain damage cause by spawn_opt_max_heap_size failing
Make bulk_send_bigbig/1 purely informational
distribution_SUITE: Refactor bulk_send_bigbig/1
receive_SUITE: Remove ?line macros
Lengthen too short timetraps
Fix process_SUITE:low_prio/1
|
|
* bjorn/erts/fix-sys-task-cleanup:
Make sure that asynchronous replies are not lost
|
|
Time measurements are always tricky, particulary on virtual hosts.
On one particular virtual host, the measured times were often 0.
Measuring the time for 100 calls instead of 10 calls helps, but
0 can still be returned, so we will also need to discard
measurements that return 0 and try again.
|
|
On a computer with 32 schedulers, there would be 9632 (301*32)
'timeout' message in the receive queue. Receiving them with a
selective receive (matching on the timer ID) is quite slow.
Change the test case to read out the queue in the order the
messages are stored in the queue.
|
|
old_scheduler_SUITE was written before the SMP emulator.
It does not test anything that scheduler_SUITE does not
test. Keeping it wastes time when running the emulator
test suite, and does not help us find any bugs that
scheduler_SUITE would find.
|
|
process_SUITE starts os_mon in init_per_suite/1. Therefore,
there may be occasional alarm info messages received. Make
sure that they are ignored and don't cause the test fail to
fail.
Also, get rid of the flush/0 function that discards all
messages in the message queue. Instead, be more selective
and only discard {error, ...} messages.
|
|
If process_SUITE:spawn_opt_max_heap_size/1 failed, the default
value for the maximum heap size could have been changed. That
would cause other test cases that spawned huge processes to
fail.
Contain the damage by always restoring the default value
for max_heap_size in end_per_testcase/2.
|
|
bulk_send_bigbig/1 sometimes fails even if there is nothing wrong.
Stop testing the ratio, and just return information about the speed
and number of monitor messages. The testcase will still serve as a
smoke test of the +zdbbl option.
|
|
Refactor bulk_send_bigbig/1 to make it somewhat easier to follow.
|
|
|
|
c062dfc485a added timetraps to test suites that had no timetraps.
Some of added timetraps are only 5 or 10 seconds, which is can be
too short time on some slow computers. Change those times to one
or two minutes.
|
|
It is expected that low-priority processes should be allowed
to run about 1/8 of the time of normal-priority processes.
The proportion calculated was usually considerably lower than
1/8. It seems that the main reason is the punishement in
reductions when sending to a process that alreday has many
messages in the message queue. I have verified that by running
the emulator with the +snsp to turn off the send punishment.
To avoid that punishment, let the server process run at high
priority so that it can keep its message queue short.
It seems that the proportion is now very close to 1/8. Therefore,
we can tighten the margins for the proportion.
|
|
|
|
* rickard/purge-hibernated-19:
Update testcase to check that purge handle hibernated process correct
|
|
* rickard/purge-hibernated:
Update testcase to check that purge handle hibernated process correct
Conflicts:
erts/emulator/test/code_SUITE.erl
|
|
|
|
|
|
(First attempt to fix in 23f132d9ab776a.)
If an synchronous GC was requested by calling:
erlang:garbage_collect(Pid, [{async,Ref}])
the reply message could in certain circumstances be
lost.
The problem is that cleanup_sys_tasks() is never called
if there are dirty tasks, but no other active system tasks.
Also shorten the long waiting times in the test case
binary_SUITE:trapping/1 to make it much more likely that
the GC have not already finished when the process is killed.
|
|
The garbage_collect message could be received while waiting for trace messages,
causing the test to crash erroneously.
|
|
* bjorn/cuddle-with-tests:
bs_construct_SUITE: Correct calculation of free memory
|
|
free_mem/0 returned the number of free Kb, but the caller
assumed that it was in Mb.
Also add another clause to further scale down the size of
the binaries created.
|
|
and base allowed hash deviation on nr of standard deviations
to make it easier to fiddle with the work load.
|
|
* sverker/enif_select-testing:
erts: Fix nif_SUITE:monitor_frenzy for threadless
erts: Improve message flush in nif_SUITE
erts: Test monitor resource destructor from thread
|
|
|
|
Pass number of expected messages in order to
wait longer for messages (for slow machines)
while not wasting test time waiting for nothing.
|
|
which is scheduled on non-smp VM.
|
|
#### Why do we need this new feature?
There are cases when a NIF needs to send a message, using `enif_send()`, to a long-lived process with a registered name.
A common use-case is logging, where asynchronous fire-and-forget messages are the norm.
There can also be cases where a yielding or dirty NIF or background thread may request a callback from a service with additional information it needs to complete its operation, yielding or waiting (with suitable timeouts, etc) until its state has been updated through the NIF module's API.
NIFs can only send messages to pids, and the lack of name resolution leaves a complicated dance between separate monitoring processes and the NIF as the only way to keep a NIF informed of the whereabouts of such long-lived processes.
Providing a reliable, built-in facility for NIFs to resolve process (or port) names simplifies these use cases considerably.
#### Risks or uncertain artifacts?
Testing has not exposed any significant risk.
The implementation behaves as expected on regular and dirty scheduler threads as well as non-scheduler threads.
By constraining the `enif_whereis_...()` functions to their minimal scopes and using patterns consistent with related functions, the implementation, testing, and maintenance burden is low.
The API and behavior of existing functions is unchanged.
#### How did you solve it?
While extending `enif_send()` to operate on a pid or an atom (as `erlang:send/2` does) was attractive, it would have entailed changing the type of its `to_pid` parameter and thereby breaking backward compatibility.
The same consideration applies to `enif_port_command()`.
That leaves a choice between 1, 2, or 3 new functions:
1. `enif_whereis()`
2. `enif_whereis_pid()` and `enif_whereis_port()`
3. All of the above.
While option (1), directly mimicking the behavior of `erlang:whereis/1`, is appealing, it poses potential problems if `pid()` or `port()` are subsequently implemented as non-integral types that must be bound to an owning `ErlNifEnv` instance.
Therefore, option (2) has been chosen to use `ErlNifPid`/`ErlNifPort` structures in the API to maintain proper term ownership semantics.
|