aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2017-11-30Stop testing use_threads in sendfile_SUITEJohn Högberg
The option no longer does anything at all.
2017-11-30Stop testing the artificial size limit on writesJohn Högberg
The old driver didn't fall back to using write(2) if writev(2) failed due to the combined length of the iov overflowing a ssize_t, but the new one doesn't have any problems with it so we failed this test with a case_clause error on 32-bit machines.
2017-11-30Stop using prim_file directly in test_serverJohn Högberg
Files opened with the file module are not guaranteed to work with prim_file, even when opened in raw mode.
2017-11-30get_cwd/1 on non-existent drives should error outJohn Högberg
2017-11-30Reads that draw from both buffer and file must workJohn Högberg
2017-11-30Fix incorrect assumption about process activityJohn Högberg
The tests assume that the most active process will be the current one, which is no longer true since the delayed_write option now uses a wrapper process for much of its work. The timeout for this test has been increased to account for the lack of delayed_write; 60s was enough for everything except the debug build on some machines.
2017-11-30Volume-relative paths must work on WindowsJohn Högberg
2017-11-30Operations on closed raw files should return EINVALJohn Högberg
2017-11-30Use lexemes/2 instead of the deprecated tokens/2John Högberg
2017-11-30Remove port subtest in qlc_SUITE:sortJohn Högberg
This subtest revolves around the possibility that the underlying port can be killed, which is nonsense now that the file suite no longer uses ports for anything.
2017-11-30Remove disk_log_SUITE:evilJohn Högberg
This test revolves around the possibility that the underlying port can be killed, which is nonsense now that the file suite no longer uses ports for anything.
2017-11-30Ensure that trailing slashes are ignored on list_dirJohn Högberg
2017-11-30Ensure that root paths are translated to our preferred formJohn Högberg
2017-11-30Tighten timings in delayed_writeJohn Högberg
The cumulative wait time was as long as the delay itself in the flush-on-size test, causing the test to pass because the write managed to time out.
2017-11-30pread/2 must always return a list of resultsJohn Högberg
2017-11-30Test opening raw files in the same manner as regular onesJohn Högberg
2017-11-30Add microbenchmarks for file:read/2 and file:write/2John Högberg
2017-11-30Account for new behavior in tests that touch prim_fileJohn Högberg
This also hides the module behind ?PRIM_FILE to make testing new implementations less painful.
2017-11-30Reimplement efile_drv as a dirty NIFJohn Högberg
This improves the latency of file operations as dirty schedulers are a bit more eager to run jobs than async threads, and use a single global queue rather than per-thread queues, eliminating the risk of a job stalling behind a long-running job on the same thread while other async threads sit idle. There's no such thing as a free lunch though; the lowered latency comes at the cost of increased busy-waiting which may have an adverse effect on some applications. This behavior can be tweaked with the +sbwt flag, but unfortunately it affects all types of schedulers and not just dirty ones. We plan to add type-specific flags at a later stage. sendfile has been moved to inet_drv to lessen the effect of a nasty race; the cooperation between inet_drv and efile has never been airtight and the socket dying at the wrong time (Regardless of reason) could result in fd aliasing. Moving it to the inet driver makes it impossible to trigger this by closing the socket in the middle of a sendfile operation, while still allowing it to be aborted -- something that can't be done if it stays in the file driver. The race still occurs if the controlling process dies in the short window between dispatching the sendfile operation and the dup(2) call in the driver, but it's much less likely to happen now. A proper fix is in the works. -- Notable functional differences: * The use_threads option for file:sendfile/5 no longer has any effect. * The file-specific DTrace probes have been removed. The same effect can be achieved with normal tracing together with the nif__entry/nif__return probes to track scheduling. -- OTP-14256
2017-11-30Add a mutable binary buffer type (prim_buffer)John Högberg
2017-11-30Update syntax_tools to support the stacktrace variableBjörn Gustavsson
2017-11-30Use the new syntax in more test suitesBjörn Gustavsson
2017-11-30Add syntax in try/catch to retrieve the stacktrace directlyBjörn Gustavsson
This commit adds a new syntax for retrieving the stacktrace without calling erlang:get_stacktrace/0. That allow us to deprecate erlang:get_stacktrace/0 and ultimately remove it. The problem with erlang:get_stacktrace/0 is that it can keep huge terms in a process for an indefinite time after an exception. The stacktrace can be huge after a 'function_clause' exception or a failed call to a BIF or operator, because the arguments for the call will be included in the stacktrace. For example: 1> catch abs(lists:seq(1, 1000)). {'EXIT',{badarg,[{erlang,abs, [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20|...]], []}, {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]}, {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]}, {shell,exprs,7,[{file,"shell.erl"},{line,687}]}, {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]}, {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]}} 2> erlang:get_stacktrace(). [{erlang,abs, [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, 23,24|...]], []}, {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]}, {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]}, {shell,exprs,7,[{file,"shell.erl"},{line,687}]}, {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]}, {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}] 3> We can extend the syntax for clauses in try/catch to optionally bind the stacktrace to a variable. Here is an example using the current syntax: try Expr catch C:E -> Stk = erlang:get_stacktrace(), . . . In the new syntax, it would look like: try Expr catch C:E:Stk -> . . . Only a variable (not a pattern) is allowed in the stacktrace position, to discourage matching of the stacktrace. (Matching would also be expensive, because the raw format of the stacktrace would have to be converted to the cooked form before matching.) Note that: try Expr catch E -> . . . is a shorthand for: try Expr catch throw:E -> . . . If the stacktrace is to be retrieved for a throw, the 'throw:' prefix must be explicitly included: try Expr catch throw:E:Stk -> . . .
2017-11-30erl_parse: Use a new pat_expr rule for pattern expressionsBjörn Gustavsson
In the grammar file for the Erlang language, patterns are parsed as expressions. erl_lint will then weed out expressions that are not legal patterns. The rule sharing causes problems if we were to introduce new syntax, for example a pattern followed by a ':'. There would be a shift/reduce conflict, and a pattern followed by a ':' would be parsed as a remote call. Introduce a new pat_expr rule to express exactly the subset of expressions that is allowed in pattern. Note: For the moment, we must allow full expressions in case clauses to keep 'merl' working.
2017-11-30Stop trying to maximize the use of x(0)Björn Gustavsson
X register 0 used to be mapped to a hardware register, and therefore faster than the other registers. Because of that, the compiler tried to use x(0) as much as possible as a temporary register. That was changed a few releases ago. X register 0 is now placed in the array of all X registers and has no special speed advantage compared to the other registers. Remove the code in the compiler that attempts to use x(0) as much as possible. As a result, the following type of instruction will be much less frequent: {put_list,Src,{x,0},{x,0}} Instead, the following type of instruction will be more frequent: {put_list,Src,{x,X},{x,X}} (Where X is an arbitrary X register.) Update the runtime system to specialize that kind of put_list instruction.
2017-11-30Merge branch 'maint'Dan Gudmundsson
* maint: Fix type create_option() in mnesia
2017-11-30Merge pull request #1647 from aboroska/fix-mnesia-type-create_optionDan Gudmundsson
Fix type create_option() in mnesia
2017-11-30Clean up collection of basic blocksBjörn Gustavsson
2017-11-30Merge branch 'bjorn/compiler/coverage'Björn Gustavsson
* bjorn/compiler/coverage: v3_codegen: Remove check of operand for bs_context_to_binary beam_jump: Eliminate a repeated clause beam_asm: No longer allow iolists as contents in chunk/2 beam_utils_SUITE: Cover more lines in beam_utils guard_SUITE: Add a test case to cover beam_dead:turn_op/1 Recognize 'nil' as a literal in beam_utils:bif_to_test/3 Cover more code in beam_bsm:btb_opt_1/3 Add test to cover a line in v3_kernel:opt_single_valued/3
2017-11-30Merge branch 'maint'Dan Gudmundsson
* maint: Avoid falling measurements testcases on slow machines stdlib: string optimize special case for ASCII stdlib: Minor unicode_util opts
2017-11-30Merge branch 'dgud/stdlib/optimize-string-lists' into maintDan Gudmundsson
* dgud/stdlib/optimize-string-lists: Avoid falling measurements testcases on slow machines stdlib: string optimize special case for ASCII stdlib: Minor unicode_util opts OTP-14670
2017-11-29Minor grammar tweak in ETS documentationIsaac Whitfield
2017-11-29Avoid falling measurements testcases on slow machinesDan Gudmundsson
2017-11-29stdlib: string optimize special case for ASCIIDan Gudmundsson
Avoid unicode_util module call for ASCII strings
2017-11-29stdlib: Minor unicode_util optsDan Gudmundsson
Exit early for Latin-1
2017-11-29Merge branch 'maint'Ingela Anderton Andin
2017-11-29Merge branch 'ingela/ssl/ERL-521/OTP-14794' into maintIngela Anderton Andin
* ingela/ssl/ERL-521/OTP-14794: ssl: Make sure all possible data is delivered
2017-11-29Stop checking DNS name for SNIRaimo Niskanen
2017-11-29Merge branch 'maint'Ingela Anderton Andin
Conflicts: lib/ssl/src/ssl_connection.erl
2017-11-29Merge branch 'ingela/ssl/cleaner-code' into maintIngela Anderton Andin
* ingela/ssl/cleaner-code: ssl: Add gracefullness to dtls code ssl: Remove old softupgrade code ssl: Use genstamtem properly
2017-11-29v3_codegen: Remove check of operand for bs_context_to_binaryBjörn Gustavsson
The bs_context_to_binary instruction only allows a register operand. v3_codegen has a test to ensure that the operand is a register. That test is no longer necessary. There used to be a possibility that optimizations in sys_core_fold and the inliner could change the operand for bs_context_to_binary to a binary literal. Since 09112806c15a81b that can no longer happen, because no more optimizations are run after the introduction of the bs_context_to_binary instruction.
2017-11-28ssl: Align timing just in caseIngela Anderton Andin
2017-11-28ssl: Make sure all possible data is deliveredIngela Anderton Andin
2017-11-28add hibernate_after to the gen options type specTristan Sloughter
2017-11-28stdlib: Do not check base64 input more than neededHans Bolinder
Often the decode functions return a function_clause error, but not always, and the errors have not been consistent between modifications of the base64 module. Now the errors are returned as they happen--no attempt to make them look nice is done. The alternative, to ensure that, for example, {badarg, Culprit} is always returned upon bad input, was deemed pointless.
2017-11-28stdlib: Minor optimization of base64Hans Bolinder
Using /bits instead of /binary is faster when constructing binaries.
2017-11-28stdlib: Use binary_to_list in base64 when it is fasterHans Bolinder
It is sometimes faster to use binary_to_list on input, at least when not considering time for garbage collections. The three functions all return a list, and the temporary list created by binary_to_list should be reclaimed very fast. The implementation from before is thus kept.
2017-11-28stdlib: Optimize base64 functionsHans Bolinder
A few test cases with zeroes are added. They were not handled correctly before. The access of DECODE_MAP is moved into the inlined function b64d, for symmetry. The function b64e is also inlined. The speed-up is small, but measurable. Note: encode(List), decode(List) and mime_decode(List) no longer call list_to_binary. This can break code that calls the functions with I/O-lists as input.
2017-11-28Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Extend the map implementation's handling of ?unit dialyzer: Use string:find() instead of string:str()
2017-11-28Merge branch 'hasse/dialyzer/maps_anon_fun/OTP-14743' into maintHans Bolinder
* hasse/dialyzer/maps_anon_fun/OTP-14743: dialyzer: Extend the map implementation's handling of ?unit dialyzer: Use string:find() instead of string:str()