Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
* qrilka/patch-2/typo-fix:
Minor misprints correction
|
|
|
|
|
|
Symptom: base64_SUITE:roundtrip crashes with hipe compiled stdlib.
Problem: HIPE_WRAPPER_BIF_DISABLE_GC pushed a "trap frame", but the frame
was only popped if the call was recursive.
Solution: Only reserve "trap frame" if BIF call is recursive.
|
|
The trap_frame got pushed twice, first by the wrapper then by
hipe_push_beam_trap_frame as it was looking at F_DISABLE_GC.
|
|
|
|
* egil/map-type-opt/OTP-12253:
compiler: Type is_nonempty_list optimization
compiler: Type map optimization
|
|
|
|
* peppe/common_test/crash_during_close:
Solve memory consumption problem
Fix problem with buffered async io messages executed too late
Don't generate weird exit if ct_logs has terminated before shut down
OTP-12159
|
|
The compiler option 'asm' has been replaced by 'from_asm' in
Erlang/OTP 18.0.
|
|
The ct_line module was removed some releases ago.
|
|
|
|
* rickard/eager-check-io/OTP-12117:
Introduce support for eager check I/O scheduling
|
|
* lukas/erts/non-blocking-shell:
Fix io:columns/0 timeout when invoked via user
kernel,ssh: Add synchronous user_drv protocol
erts: Make writing to non-tty fds non-blocking
erts: Make tty driver non-blocking
|
|
...using ct_release_test:upgrade/4
|
|
This is a library module for testing release related functionality in
one or more applications. The first version of ct_release_tests
include test of upgrade only.
Note that the hipe application does not support any upgrade, and typer
and dialyzer requires hipe, so these three applications are always
exluded from the test.
|
|
Takes the name of the child (or Pid, in the case of a
simple_one_for_one supervisor) and returns the map which specifies the
child.
|
|
Earlier, supervisor flags and child specs were given as tuples. While
this is kept for backwards compatibility, it is now also allowed to
give these parameters as maps:
-type sup_flags() :: #{strategy => strategy(), % optional
intensity => non_neg_integer(), % optional
period => pos_integer()} % optional
-type child_spec() :: #{id => child_id(), % mandatory
start => mfargs(), % mandatory
restart => restart(), % optional
shutdown => shutdown(), % optional
type => worker(), % optional
modules => modules()} % optional
Default values are as follows:
Supervisor flags:
strategy: one_for_one
intensity: 1
period: 5
Child specs:
restart: permanent
type: worker
shutdown: 5000 for workers, 'infinity' for supervisors
modules: [M], where M comes from the child's start {M,F,A}
Some of these default values are quite hard to decide on, since there
really is no "most common way". It always depends on the use case. So
we decided that the most important reason for having default values is
to lower the start barrier and get "something" running. For production
use, most systems must be fine tuned in this respect anyway.
This is how we reasoned about it:
Strategy: just pick one - and 'one_for_one' was most used in OTP.
Max restart frequency (intensity/period): by allowing one restart only
we keep the important supervisor feature of restarting children, but
we also avoid the possibility of scaling to a huge amount of restarts
if the supervisor tree is deep.
Restart: just pick one - and 'permanent' is fairly common.
Shutdown for workers: to avoid the confusion of why the terminate
function is not executed, we decided not to use 'brutal_kill'. Which
number to use is probably not that important, so we chose 5000.
Shutdown for supervisors: the recommended shutdown value for
supervisors is 'infinity', so we decied to use that. Having the same
(integer) value as for workers can give very strange results.
Type: just pick one - and we believe that 'worker' is most common
|
|
Set IN_POOL flag _after_ mbc has been actually inserted.
Earlier it did not matter if IN_POOL was set early as it was not possible
to find a carrier before is was fully inserted. Now when searching
pooled_list and traitor_list we must make sure a found carrier has been
fully inserted into cpool before removing it.
|
|
The upgrade instruction 'remove_module' was added in OTP R7B (and
possibly in a patch in R5B or R6B, ticket OTP-3477), and translates to
the low level instruction 'remove', but adds the parameter DepMods
(modules on which Mod is dependent). The ticket says that
"remove_module should be added for symmetry with the add_module
instruction". remove_module was never documented or tested, and it was
never mentioned in a release note. It therefore seems to be low risk
in removing it.
The correct instruction to use when removing a module is
{delete_module,Mod}
which was added in OTP R10B and which is also documented and
tested. This translates to low level instructions 'remove' and 'purge'
i.e. the module is brutally purged after setting the current code to
old. This hardcoded brutal purge is the reason why PrePurge and
PostPurge parameters can not be given with the delete_module
instruction.
The parameter DepMods which was inclued in the remove_module
instruction does not exist for delete_module. From the documentation's
point of view, this is the same for add_module, and thus the two
instructions {add_module,Mod} and {delete_module,Mod} are now
symmetric. However, in the code there is a second instruction for
adding a module, {add_module,Mod,DepMods}, which is not documented. To
add symmetry even for this, {delete_module,Mod,DepMods} is now also
added. Documentation is added for all instructions.
|
|
* tuncer/compiler/finalize-asm-deprecation/OTP-12100:
compiler: finalize 18.x 'asm' deprecation
|
|
* maint:
BER decoding: Don't allow primitives with indefinite lengths
|
|
* bjorn/asn1/primitive-indefinite-length/OTP-12205:
BER decoding: Don't allow primitives with indefinite lengths
|
|
|
|
* adelzhang/fix_application_master_comment:
Fix obsolete comment
|
|
This implements the LDAP Password Modify Extended Operation (RFC 3062)
with two new functions modify_password/3 and modify_password/4. The
former is for directly setting passwords, and the latter is for users to
change their own passwords.
Since all three parameters are optional, I've opted to support this with
the empty string rather than a property list. This seems consistent with
other functions in the module (i.e. modify_dn/5).
|
|
Code incorrectly relied on undefined C behavior. Clang and gcc 4.9 do not behave
as code expected. This affected cores and processors detection on FreeBSD.
|
|
|
|
The crash_dump document mentions indirectly that delivering a SIGUSR1 to a
running emulator process can force it to crash dump. Clarify that text to
make it clear SIGUSR1 can be used for that purpose, and also add a similar
note about using SIGUSR1 to the erl documentation.
|
|
The documentation for driver_async() still referred to the return value of
the function as a "handle", which is no longer meaningful since
driver_async_cancel() was deprecated and removed. Modify the documentation
to simply indicate that the driver_async() return value will be -1 if it
fails.
|
|
|
|
|
|
|
|
|
|
This patch fixes an issue where io:columns/0 times out when invoked from
any application callback (or any supervisor/supervised module since the
group leader is inherited).
To reproduce the issue, one must simply call io:columns() from any
application callback. You will notice the process will block for 2 seconds
which then times out and returns {:error, :enotsup}.
Note this bug only happens inside the erlang shell (using -noshell or
escripts do not trigger the bug).
To fix the bug, it is important to understand how io requests flow from
application callback processes. Here are the steps followed:
1. Since io:columns/1 is timing out, the first step is to find out who is the
group leader for the application callback process. Using process_info/1, we
can see the parent process is the application_master and handles
io_requests by delegating them to the group_leader.
2. By inspecting the application_master process, we can find the group_leader
the message is sent is the registered process named user. The process is
running the group module which does handle io:columns/1 requests delegating
them to user_drv process.
3. The user_drv process does handle tty_geometry requests, except that a
clause above ends up short-circuiting all tty_geometry requests from the
user process.
This patch moves the user clause below the specific driver messages.
OTP-12241
|
|
Added a put_chars_sync to the protocol that can be used to
talk to user_drv and made group use it. This is needed in order
to guarantee that bytes has been pushed to the tty port when
doing something like this:
io:format("halting\n"),erlang:halt(0).
Before this change the halting message could be lost in the message
queue of the user_drv process, this is no longer possible.
This commit also fixes ssh_cli as that plugs itself in as a user_drv
process.
OTP-12240
|
|
If the fd_driver is given non-tty fds it will now use an async thread
instead of doing a blocking write. An example of a non-tty fd is the
fd used by stderr, but could be anything handed down to the driver.
|
|
Instead of using blocking call to fwrite, the tty driver
now uses non-blocking calls to writev and queues any output
data that cannot be written into the driver queue. Without
this change an stdout write could block an entire scheduler
if for some reason the pseudo tty on the other side does not
consume the output of the Erlang shell.
OTP-12239
|
|
Cleanup macro code.
|
|
|
|
* maint:
ssh: Fixes clause syntax error in ssh.appup.src
|
|
* hans/ssh/correct_appup:
ssh: Fixes clause syntax error in ssh.appup.src
|
|
|
|
|
|
|
|
|
|
Conflicts:
OTP_VERSION
|