Age | Commit message (Collapse) | Author |
|
A process requesting a system task to be executed in the context of
another process will be notified by a message when the task has
executed. This message will be on the form:
{RequestType, RequestId, Pid, Result}.
A process requesting a system task to be executed can set priority
on the system task. The requester typically set the same priority
on the task as its own process priority, and by this avoiding
priority inversion. A request for execution of a system task is
made by calling the statically linked in NIF
erts_internal:request_system_task(Pid, Prio, Request). This is an
undocumented ERTS internal function that should remain so. It
should *only* be called from BIF implementations.
Currently defined system tasks are:
* garbage_collect
* check_process_code
Further system tasks can and will be implemented in the future.
The erlang:garbage_collect/[1,2] and erlang:check_process_code/[2,3]
BIFs are now implemented using system tasks. Both the
'garbage_collect' and the 'check_process_code' operations perform
or may perform garbage_collections. By doing these via the
system task functionality all garbage collect operations in the
system will be performed solely in the context of the process
being garbage collected. This makes it possible to later implement
functionality for disabling garbage collection of a process over
context switches.
Newly introduced BIFs:
* erlang:garbage_collect/2 - The new second argument is an option
list. Introduced option:
* {async, RequestId} - making it possible for users to issue
asynchronous garbage collect requests.
* erlang:check_process_code/3 - The new third argument is an
option list. Introduced options:
* {async, RequestId} - making it possible for users to issue
asynchronous check process code requests.
* {allow_gc, boolean()} - making it possible to issue requests
that aren't allowed to garbage collect (operation will abort
if gc should be needed).
These options have been introduced as a preparation for
parallelization of check_process_code operations when the
code_server is about to purge a module.
|
|
|
|
<<131, 77, Len:32, Bits:8, Data/binary>>
badarg if Bits > 8
Used to return internally inconsistent bitstring
badarg if Len==0 and Bits > 0
Used to return invalid *huge* binary (size = (Uint)-1)
badarg if Bits==0 and Len > 0
Used to return valid binary as if Bits was 8
|
|
Conflicts:
erts/preloaded/ebin/erl_prim_loader.beam
|
|
* siri/erl_prim_loader/normalize-and-backslash/OTP-11170:
Update preloaded
Fix bug with backslash in erl_prim_loader:normalize/1
|
|
Conflicts:
bootstrap/lib/kernel/ebin/os.beam
|
|
|
|
* mhssler/add-os-unsetenv/OTP-11446:
erts: remove ?line macro in testcases
Update primary bootstrap
Add os:unsetenv/1
|
|
|
|
* sverk/cerl-gdb-fix:
erts: Fix cerl -gdb
|
|
The sync option adds the POSIX O_SYNC flag to the open system call on
platforms that support the flag or its equivalent, e.g.,
FILE_FLAG_WRITE_THROUGH on Windows. For platforms that don't support it,
file:open/2 returns {error, enotsup} if the sync option is passed in.
The semantics of O_SYNC are platform-specific. For example, not all
platforms guarantee that all file metadata are written to the disk along
with the file data when the flag is in effect. This issue is noted in the
documentation this commit adds for the sync option.
Add a test for the sync option. Note however that the underlying OS
semantics for O_SYNC can't be tested automatically in any practical way, so
the test assumes the OS does the right thing with the flag when
present. For manual verification, dtruss on OS X and strace on Linux were
both run against beam processes to watch calls to open(), and file:open/2
was called in Erlang shells to open files for writing, both with and
without the sync option. Both the dtruss output and the strace output
showed that the O_SYNC flag was present in the open() calls when sync was
specified and was clear when sync was not specified.
|
|
|
|
This function normalizes a path:
* convert atoms to strings
* flatten strings
* convert backslash to a forward slash
The bugfix is to only convert backslashes to forward slashes on
windows and not on any other platforms.
|
|
by replacing all newlines in $beam_args with space
|
|
|
|
* sverk/valgrind-added-leak-check:
erts: Prevent valgrind from repeating same memory leaks reports
|
|
|
|
|
|
New BIF os:unsetenv/1 which deletes an environment variable and
returns 'true'.
Does not change any old functionality.
Calls the libc function unsetenv(3) on UNIX and
SetEnvironmentVariableW(key, NULL) on Windows. The unicode support
is the same as for os:getenv and os:putenv.
|
|
|
|
* maint:
erts: Add cerl -dump and dumping in z_SUITE
|
|
* lukas/cerl_dump/OTP-11468:
erts: Add cerl -dump and dumping in z_SUITE
|
|
|
|
Needed by Dialyzer.
|
|
|
|
Replaced the +MMscmgc switch with the +MMscrfsd switch. The old switch
didn't reflect what it controlled.
|
|
The switch "+Musac <boolean>" controls if sys_alloc carriers
are allowed.
|
|
Using "+Mlpm all" switch all mappings made by the emulator will
be locked into physical memory.
|
|
|
|
|
|
* sverk/monitor-memory-leak/OTP-11410:
erts: Fix memory leak for distributed monitors
|
|
by using the macro VALGRIND_DO_ADDED_LEAK_CHECK if it exists
for system_info({error_checker,memory})
|
|
|
|
Move the call to utils/make_compiler_flags to after _create_dirs
to make sure that the dirs are created before we try to generate files
in there. This seems to work with parallel make as well, but I cannot
find any documentation that says that it should or should not work.
|
|
Disable carrier pool for the thread safe allocator instance 0.
This since non-managed threads allocates and deallocates memory
in this instance, and only managed threads are allowed to
access the carrier pool.
|
|
* maint:
erts: Add max alignment posix_memalign configure check
|
|
On some OSs posix_memalign exists, but it does not allow for alignment
greater than the current page size. So we have to do a runtime check for
alignment size and also add cross compile options.
|
|
When dumping the heaps and stacks in the erl_crash.dump file, only
the lower 32 bits of pointers would be printed. Ensure that all bits
are printed.
While at it, make sure that printing sub binaries with a debug compiled
run-time system will work.
|
|
|
|
* egil/fix-crashdump-pointer-crash/OTP-11420:
erts: Fix segfaulting crashdump writing
|
|
* egil/r17/fix-crashdump-printout/OTP-11419:
erts: Remove space in 'Buckets' printout
erts: Remove unit in 'Time left' printout
|
|
|
|
* mhssler/fix-doc-typos/OTP-11414:
Fix ssh doc typos
Fix gen_sctp doc typo
Fix erts erlang.xml doc typo
|
|
Crashdumps initiated by out-of-memory on spawn could cause the beam
to segfault during crashdump writing due to invalid pointers.
The pointers are invalid since the process creation never finished.
This commit remedies this problem by removing the process from
crashdump printout.
|
|
|
|
OTP-11408
* sverk/load-nif-unicode:
erts: Fix bug in atom to filename conversions
Fix open_ddll for win
erts, crypto: Support NIF library with unicode filename on windows
erts: Factor out erts_convert_filename_to_wchar()
erts: Fix compiler warning
erts: Fix loading of NIF library with unicode in path
erts: Remove unused constant DRIVER_TAB_SIZE
|
|
|
|
* sverk/time-consistency-test:
erts: Fix time_SUITE:consistency to work over turn of the month
|
|
badargif -> badarg if
|
|
Conflicts:
erts/preloaded/ebin/erlang.beam
|