Age | Commit message (Collapse) | Author |
|
* 'map-get-bif' of git://github.com/michalmuskala/otp:
Introduce map_get guard-safe function
OTP-15037
|
|
IngelaAndin/ingela/ssl/hello-pause/ERL-169/OTP-14372
Add new API functions to enable smoother user customizations based on TLS hello extensions
|
|
Improve memory instrumentation
OTP-15024
OTP-14961
|
|
* raimo/stdlib/gen_statem-dev/OTP-14015:
Fix after feedback
Improve pointer to User's Guide
Fix after feedback on 'When to use'
Add a 'When to use' section
Fix timeout parsing and doc feedback
Improve doc, change images to .svg
erl_docgen: Implement width in image tag
Update User's Guide and pointers to it
Improve error reasons from state enter call
|
|
* maint:
Updated OTP version
Prepare release
ssh: Fix server crashes for exit-normal signals
|
|
* maint-18:
Updated OTP version
Prepare release
ssh: Fix server crashes for exit-normal signals
Conflicts:
OTP_VERSION
lib/ssh/doc/src/notes.xml
lib/ssh/src/ssh_connection_handler.erl
lib/ssh/vsn.mk
otp_versions.table
|
|
Rationale
Today all compound data types except for maps can be deconstructed in guards.
For tuples we have `element/2` and for lists `hd/1` and `tl/1`. Maps are
completely opaque to guards. This means matching on maps can't be
abstracted into macros, which is often done with repetitive guards. It
also means that maps have to be always selected whole from ETS tables,
even when only one field would be enough, which creates a potential
efficiency issue.
This PR introduces an `erlang:map_get/2` guard-safe function that allows
extracting a map field in guard. An alternative to this function would be
to introduce the syntax for extracting a value from a map that was planned
in the original EEP: `Map#{Key}`.
Even outside of guards, since this function is a guard-BIF it is more
efficient than using `maps:get/2` (since it does not need to set up the
stack), and more convenient from pattern matching on the map (compare:
`#{key := Value} = Map, Value` to `map_get(key, Map)`).
Performance considerations
A common concern against adding this function is the notion that "guards
have to be fast" and ideally execute in constant time. While there are
some counterexamples (`length/1`), what is more important is the fact
that adding those functions does not change in any way the time
complexity of pattern matching - it's already possible to match on map
fields today directly in patterns - adding this ability to guards will
niether slow down or speed up the execution, it will only make certain
programs more convenient to write.
This first version is very naive and does not perform any optimizations.
|
|
* lukas/erl_docgen/add_github_contrib_link/OTP-14979:
erl_docgen: Fix title link with '?'
|
|
* peterdmv/httpd_reload_config/ERL-578/OTP-15025:
inets: Fix httpd:reload_config/2
Change-Id: Ib02587ac75f7f9f4ce665c6ead54b5ab11560411
|
|
erl_interface: fix bad memset
|
|
* peterdmv/relative_path_script_alias/ERL-574/OTP-15021:
inets: Fix handling of relative paths in script_alias
Change-Id: I6874d37f538bde0e54276f2841dbb763e1d19ff6
|
|
|
|
|
|
|
|
* sverker/ets-cherries/OTP-15031:
erts: Use table ref for select continuation
erts: Refactor erl_db_hash next() into next_live()
erts: Change wrong alloc_fnf
|
|
This commit replaces the old memory instrumentation with a new
implementation that scans carriers instead of wrapping
erts_alloc/erts_free. The old implementation could not extract
information without halting the emulator, had considerable runtime
overhead, and the memory maps it produced were noisy and lacked
critical information.
Since the new implementation walks through existing data structures
there's no longer a need to start the emulator with special flags to
get information about carrier utilization/fragmentation. Memory
fragmentation is also easier to diagnose as it's presented on a
per-carrier basis which eliminates the need to account for "holes"
between mmap segments.
To help track allocations, each allocation can now be tagged with
what it is and who allocated it at the cost of one extra word per
allocation. This is controlled on a per-allocator basis with the
+M<S>atags option, and is enabled by default for binary_alloc and
driver_alloc (which is also used by NIFs).
|
|
* hans/ssh/remove_dead_files/OTP-15028:
ssh: Remove unused ssh_client_key.erl and ssh_server_key.erl
|
|
|
|
- Add proper handling of path() as the first argument to
httpd:reload_config/2.
Change-Id: Ia5779bdd55bff974e8eb0dd16ef26edf1f52fcff
|
|
Compiling OTP-20.3.4 with GCC-7 generates the following warning:
CC /tmp/otp_src_20.3.4/lib/erl_interface/obj.st/x86_64-unknown-linux-gnu/erl_marshal.o
legacy/erl_marshal.c: In function 'erl_init_marshal':
legacy/erl_marshal.c:110:5: warning: 'memset' used with length equal to number of elements without multiplication by element size [-Wmemset-elt-size]
memset(cmp_array, 0, CMP_ARRAY_SIZE);
^~~~~~
CMP_ARRAY_SIZE (256) is the number of elements in that array, but the
elements are not char but enum, which is 4 bytes on e.g. x86-64.
This results in 3/4 of the array not being correctly initialized.
Idiomatic C is to pass sizeof cmp_array to memset(), so that's what I did.
|
|
and not the name. For more sane named table semantics.
Applies to both select/1 continuation and trap context.
|
|
|
|
Deprecate erlang:get_stacktrace/1
|
|
* maint:
Updated OTP version
Prepare release
inets: Fix broken httpc options handling
ssh: Fix server crashes for exit-normal signals
ssh: Fix ssh_sftpd:handle_op not returning State
Conflicts:
OTP_VERSION
|
|
* maint-20:
Updated OTP version
Prepare release
erl_interface: Optimize latin1_to_utf8 and friend
inets: Fix broken httpc options handling
erl_interface: Fix ei_connect
ssh: Fix server crashes for exit-normal signals
ssh: Fix ssh_sftpd:handle_op not returning State
ic: Optimize oe_ei_encode_atom
|
|
|
|
|
|
into aclocal.m4 as LM_HARDWARE_ARCH
|
|
into master
as'sverker/master/optimize-atom-enc-dec/ERIERL-150'
|
|
|
|
* sverker/optimize-atom-enc-dec/ERIERL-150/OTP-15023:
erl_interface: Optimize latin1_to_utf8 and friend
ic: Optimize oe_ei_encode_atom
|
|
maint-20
* sverker/erl_interface/ei_connect-erange-fix/OTP-15022:
erl_interface: Fix ei_connect
|
|
* peterdmv/httpc_options_handling/ERL-441/OTP-15007:
inets: Fix broken httpc options handling
|
|
* hans/ssh/server_exit_normal_exit_20/OTP-15018:
ssh: Fix server crashes for exit-normal signals
|
|
* hans/ssh/sftpd_rm_dir_err_20/OTP-15004:
ssh: Fix ssh_sftpd:handle_op not returning State
|
|
to do word wise check/copy for pure ASCII
if ARCH allows it (x86 and amd64).
|
|
* hans/ssh/cuddle_tests:
ssh: Declare serial for three test cases
ssh: Increase timetrap for slow test machines
|
|
* bjorn/compiler/core_lint:
core_lint: Handle repeated variables in map patterns correctly
|
|
|
|
|
|
- Add support for setting socket options per request.
- Add http_ipv6 test group.
Change-Id: Ia2aca37c0b5fe64a41995c79ae3399434b17ab8a
|
|
* dgud/wx/glcanvas-improvements:
Add new "constants" to wxGLCanvas
|
|
Allow building with wxWidgets-3.1.1
OTP-15027
|
|
* maint:
Updated OTP version
Prepare release
Update appup file for sasl
Fix bug in hybrid boot file used for restart_new_emulator
Conflicts:
OTP_VERSION
lib/sasl/src/sasl.appup.src
|
|
* maint-20:
Updated OTP version
Prepare release
Update appup file for sasl
Fix bug in hybrid boot file used for restart_new_emulator
|
|
- Add function for converting relative paths to absolute
using the server_root property.
Change-Id: If9b521e4444a3382f7e5449b187c1c0ebbb3d0f3
|
|
Keys in map patterns are input variables, not pattern variables.
|
|
|
|
|
|
when ei_gethostbyname_r returns ERANGE.
|