aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib
AgeCommit message (Collapse)Author
2017-05-17proc_lib: Don't call erlang:get_stacktrace/0 twiceBjörn Gustavsson
proc_lib calls erlang:get_stacktrace/0 twice, which is unnecessary, and potentially unsafe since there are calls to many functions in between. Any of the calls could potentially cause and catch an exception, invalidating the stacktrace. Only call erlang:get_stacktrace/0 once, and pass the result to the second place where it is needed.
2017-05-17escript: Pick up stacktrace a soon as possibleBjörn Gustavsson
It happens to work today, but it is potentially unsafe to call io:format/2 before calling erlang:get_stacktrace/0. Make the code safe by calling erlang:get_stacktrace/0 directly after catching the exception.
2017-05-16Merge pull request #1453 from bjorng/bjorn/catch-warning/OTP-14401Björn Gustavsson
Warn for potentially unsafe use of get_stacktrace/0
2017-05-15Merge pull request #1407 from eltex-ecss/auto_hibernate_timeoutIngela Andin
Add option hibernate_after to gen_server, gen_statem and gen_event. Also added to the deprecated gen_fsm behaviour. OTP14405
2017-05-12Warn for potentially unsafe use of get_stacktrace/0Björn Gustavsson
erlang:get_stacktrace/0 returns the stacktrace for the latest exception. The problem is that the stacktrace is kept until the next exception occurs. If the last exception was a 'function_clause' or a 'badarg', the arguments for the call are also kept forever. The arguments can be terms of any size (potentially huge). In a future release, we would like to only allow erlang:get_stacktrace/0 from within a 'try' expression. That would make it possible to clear the stacktrace when the 'try' expression is exited. The 'catch' expression has no natural end where the stacktrace could be cleared. The stacktrace could be cleared at the end of the function that the 'catch' occurs in, but that would cause problems in the following scenario (from real life, but simplified): try ... catch _:_ -> io:format(...), io:format("~p\n", [erlang:get_stacktrace()]) end. %% In io.erl. format(Fmt, Args) -> Res = case ... of SomePattern -> catch... ...; SomeOtherPattern -> %% Output the formatted string here ... end, clear_stacktrace(), %% Inserted by compiler. Res. The call to io:format() would always clear the stacktrace before it could be retrieved. That problem could be solved by tightning the scope in which the stacktrace is kept, but the rules for how long erlang:get_stacktrace/0 would work would become complicated. Therefore, the solution we suggest for a future major release of OTP is that erlang:get_stacktrace/0 will return [] if it is called outside the 'catch' part of a 'try' expression. To help users prepare, introduce a warning when it is likely that erlang:get_stacktrace/0 will always return an empty list, for example in this code: catch error(foo), Stk = erlang:get_stacktrace() or in this code: try Expr catch _:_ -> ok end, Stk = erlang:get_stacktrace()
2017-05-11qlc: Future-proof exception handling codeBjörn Gustavsson
In the future, erlang:get_stacktrace/0 will probably only work inside a the 'catch' block of a 'try' expression. Future-proof the code by rewriting the old-style catch to a try...catch.
2017-05-10Merge branch 'sverker/ets-select-replace-const'Sverker Eriksson
* sverker/ets-select-replace-const: stdlib: Add examples for ets:select_replace docs erts: Fix ets:select_replace with {const, NewTuple}
2017-05-10stdlib: Add examples for ets:select_replace docsSverker Eriksson
2017-05-10erts: Fix ets:select_replace with {const, NewTuple}Sverker Eriksson
Enable ets:select_replace to do a generic single object compare-and-swap operation of any ets-tuple using a matchspec like this: [{Old, [], [{const, New}]}] The only exception when this does not work is if the key contains maps or atoms looking like variables (like '$1').
2017-05-05Revert "Prepare release"Raimo Niskanen
This reverts commit dc57404252c47520f352834ad9be45ad684f96c9.
2017-05-04Prepare releaseErlang/OTP
2017-05-04Update copyright yearRaimo Niskanen
2017-05-04Merge branch 'rand/arbitrary_normal_distributions'Raimo Niskanen
* rand/arbitrary_normal_distributions: Disable heavy test case
2017-05-04Merge branch 'raimo/rand-dev/OTP-14295'Raimo Niskanen
* raimo/rand-dev/OTP-14295: Adjust timetrap
2017-05-02Disable heavy test caseRaimo Niskanen
2017-05-02Adjust timetrapRaimo Niskanen
2017-05-02Fixed rebase conflicts.Anton N Ryabkov
2017-05-02Rolled back loop_receive function. HibernateAfterTimeout timeout used even ↵Anton N Ryabkov
in case of active timers exists. Added unit tests for hibernate_after functionality combined with gen_statem timers.
2017-05-02"auto_hibernate_timeout" option renamed to "hibernate_after".Anton N Ryabkov
It was done because "hibernate_after" option already used in ssl for the same reason.
2017-05-02Added support of auto_hibernate_timeout option for gen_statem.Anton N Ryabkov
2017-05-02Added reuse of code.Anton N Ryabkov
2017-05-02Fixed typos in the gen_event, gen_fsm, gen_server documentation.Anton N Ryabkov
2017-05-02Added support of auto_hibernate_timeout option for gen_server, gen_fsm, ↵Anton N Ryabkov
gen_event process's. There is realized gen_server, gen_fsm, gen_event automatic hibernation functionality. Added unit tests for realized functionality. Added documentation for auto_hibernate_timeout option.
2017-04-28Merge branch 'ingela/gen_fsm-doc-fix'Ingela Anderton Andin
* ingela/gen_fsm-doc-fix: stdlib: Adhere to DTD
2017-04-28stdlib: Adhere to DTDIngela Anderton Andin
2017-04-28Merge branch 'raimo/gen_statem-dev'Raimo Niskanen
OTP-14531 Generic time-outs in gen_statem Conflicts: lib/stdlib/test/erl_internal_SUITE.erl
2017-04-28Merge branch 'hasse/stdlib/fix_qlc_bug/OTP-14296'Hans Bolinder
* hasse/stdlib/fix_qlc_bug/OTP-14296: stdlib: Fix a test in sofs_SUITE debugger: Improve handling of pids, ports, and refs stdlib: Improve handling of pids, ports, and refs in qlc stdlib: Improve the Erlang shell's handling of references
2017-04-27Merge branch 'rickard/ets-tid-fix/OTP-14094'Rickard Green
* rickard/ets-tid-fix/OTP-14094: Fix typespec of the opaque type tid() of the ETS module
2017-04-27Merge branch 'hasse/unicode_atoms/OTP-14285'Hans Bolinder
* hasse/unicode_atoms/OTP-14285: stdlib: Add Unicode modifier t to control sequence a stdlib: Add Unicode modifier t to control sequences w and W
2017-04-27Merge branch 'ingela/deprecate/gen_fsm/OTP-14183'Ingela Anderton Andin
* ingela/deprecate/gen_fsm/OTP-14183: stdlib: Deprecate gen_fsm Conflicts: lib/stdlib/doc/src/gen_fsm.xml
2017-04-27stdlib: Deprecate gen_fsmIngela Anderton Andin
2017-04-27stdlib: Fix a test in sofs_SUITEHans Bolinder
2017-04-27stdlib: Improve handling of pids, ports, and refs in qlcHans Bolinder
The extended parser introduced in last commit is used in qlc for solving an old bug: pids and refs could not be parsed by string_to_handle(). The parser is also used for adjustments regarding ETS identifiers (now references) in qlc_SUITE. Notice that pids, references, ports, and external functions that cannot be created in the currently running system cause syntax errors (as before).
2017-04-27stdlib: Improve the Erlang shell's handling of referencesHans Bolinder
As of Erlang/OTP 20.0, the type of ETS tables, ets:tid(), is a reference(). A request was put forward that the Erlang shell should be able to handle references in its input. This commit introduces an extended parser in module lib. It can parse pids, ports, references, and external funs under the condition that they can be created in the running system. The parser is meant to be used internally in Erlang/OTP. The alternative, to extend erl_scan and erl_parse, was deemed inferior as it would require the abstract format be able to represent pids, ports, references, and funs, which would be confusing as they are not expressions as such, but data types.
2017-04-27Merge branch 'rand/arbitrary_normal_distributions'Raimo Niskanen
* rand/arbitrary_normal_distributions: Show test case progress
2017-04-27Merge branch 'raimo/rand-dev/OTP-14295'Raimo Niskanen
* raimo/rand-dev/OTP-14295: Select better test measure points
2017-04-27Show test case progressRaimo Niskanen
2017-04-26Select better test measure pointsRaimo Niskanen
2017-04-26Merge branch 'siri/unicode-atoms'Siri Hansen
* siri/unicode-atoms: Document that app names and nodes names are restricted to latin-1 Conflicts: lib/stdlib/doc/src/unicode_usage.xml
2017-04-26Merge pull request #1367 from josevalim/jv-dbgi-chunkBjörn Gustavsson
Introduce new "Dbgi" chunk OTP-14369
2017-04-26Merge branch 'raimo/rand-dev/OTP-14295'Raimo Niskanen
* raimo/rand-dev/OTP-14295: Polish
2017-04-26PolishRaimo Niskanen
2017-04-25Fix typespec of the opaque type tid() of the ETS moduleRickard Green
2017-04-25Document that app names and nodes names are restricted to latin-1Siri Hansen
2017-04-25Merge branch 'lukas/erts/list_to_port/OTP-14348'Lukas Larsson
* lukas/erts/list_to_port/OTP-14348: erts: Add erlang:list_to_port/1 debug bif erts: Auto-import port_to_list for consistency erts: Polish off erlang:list_to_ref/1
2017-04-25erts: Add erlang:list_to_port/1 debug bifLukas Larsson
2017-04-25erts: Auto-import port_to_list for consistencyLukas Larsson
Follow the same pattern as pid_to_list
2017-04-25Store abstract code in the Dbgi chunkJosé Valim
The new Dbgi chunk returns data in the following format: {debug_info_v1, Backend, Data} This allows compilers to store the debug info in different formats. In order to retrieve a particular format, for instance, Erlang Abstract Format, one may invoke: Backend:debug_info(erlang_v1, Module, Data, Opts) Besides introducing the chunk above, this commit also: * Changes beam_lib:chunk(Beam, [:abstract_code]) to read from the new Dbgi chunk while keeping backwards compatibility with old .beams * Adds the {debug_info, {Backend, Data}} option to compile:file/2 and friends that are stored in the Dbgi chunk. This allows the debug info encryption mechanism to work across compilers * Improves dialyzer to work directly on Core Erlang, allowing languages that do not have the Erlang Abstract Format to be dialyzer as long as they emit the new chunk and their backend implementation is available Backwards compatibility is kept across the board except for those calling beam_lib:chunk(Beam, ["Abst"]), as the old chunk is no longer available. Note however the "Abst" chunk has always been optional. Future OTP versions may remove parsing the "Abst" chunk altogether from beam_lib once Erlang 19 and earlier is no longer supported. The current Dialyzer implementation still supports earlier .beam files and such may also be removed in future versions.
2017-04-25Merge branch 'maint'Hans Bolinder
* maint: stdlib: Fix documentation on sets’ representation
2017-04-25stdlib: Remove the shell's support for Unicode node namesHans Bolinder
The Erlang shell's temporary support for Unicode node names is removed. There will be no support for Unicode node names in Erlang/OTP 20.0.