Age | Commit message (Collapse) | Author |
|
|
|
* bg/compiler:
beam_peep: Remove optimization already done by beam_dead
beam_dead: Combine is_eq_exact instructions into select_val instructions
Evaluate is_record/3 at compile-time using type information
Evaluate element/2 at compile-time using type information
erl_expand_records: Replace is_record() with matching
OTP-8668 bg/compiler
The compiler optimizes record operations better.
|
|
* am/net_kernel_catchall:
Add catch all handle_call to net_kernel
|
|
* jl/windows-file-share-delete:
Windows: Open files with FILE_SHARE_DELETE to get closer to UNIX semantics
OTP-8667 jl/windows-file-share-delete
On Windows, files are now opened with FILE_SHARE_DELETE to get closer to
Unix semantics.
|
|
See dwShareMode on
http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
|
|
|
|
Combine a sequence of chained is_eq_exact instructions into
a select_val instruction.
|
|
|
|
The erl_expand_records compiler pass translates the
following code:
h(X) when X#r1.a =:= 1 -> ok.
to (essentially):
h({r1,V1,V2}=X) when element(2, X) =:= 1 -> ok.
Since the guard can only be executed when the pattern matching
has succeeded, we know that the second element in the tuple X
must have been bound to V2. Thus we can eliminate the call
to element/2 like this:
h({r1,V1,V2}=X) when V1 =:= 1 -> ok.
|
|
The compiler currently generates better code for:
f(#r1{}) -> r1;
f(#r2{}) -> r2;
f(#r3{}) -> r3.
than for:
g(X) when is_record(X, r1) -> r1;
g(X) when is_record(X, r2) -> r2;
g(X) when is_record(X, r3) -> r3.
The compiler generates good code for pattern matching (as in f/1),
but in g/1 there are no patterns to match, and the clause to be
executed must be chosen by evaluating the guards sequentially
until one succeeds.
Make the compiler generate better code by replacing calls to
is_record() with matching in the function head (basically,
g/1 will automatically be rewritten to do pattern matching
as in f/1).
Note that this rewrite will also benefit code such as:
h(X) when X#r1.a =:= 1 -> ok.
because it would have been rewritten to:
h(X) when (is_record(X, r1, 3) orelse fail) and (element(2, X) =:= 1) ->
ok.
which in turn will be rewritten to:
h({r1,_,_}=X) when (true orelse fail) and (element(2, X) =:= 1) ->
ok.
(That will be further simplified in later compiler passes.)
|
|
* rn/resolver-leaking-ports:
Resolver: make inet_dns decode ugly truncated reply
Resolver: stop inet_res leaking ports
OTP-8652 inet_res leaking ports
The kernel DNS resolver was leaking one or two ports if the DNS reply could
not be parsed or if the resolver(s) caused noconnection type errors. Bug
now fixed. A DNS specification borderline truncated reply triggering the
port leakage bug has also been fixed.
|
|
Of the core networking apps only net_kernel fails to have a catchall
for unknown gen_server:call messages causing it to exit and eventually
bring down kernal_sup and beam if it had not been manually started.
For stability and consistancy it has been altered to include a
catchall which does not reply.
|
|
* dgud/emacs-catch-improvements:
Improved indentation of old catch.
Added more type highlighting and fixed record indentation with types.
|
|
* kj/emacs-erlang-flymake:
erlang-flymake: Document in README
erlang-flymake: Make the syntax check command configurable
erlang-flymake: By default pass <app>/include and <app>/ebin to compiler
erlang-flymake: Include in Makefile
erlang-flymake: Syntax check erlang code on the fly (using flymake)
|
|
Under certain circumstances the net kernel could hang. (Thanks to Scott
Lystig Fritchie.)
|
|
Added cross configuration file for mips-linux. (Thanks to Matthias Lang for
the configuration)
|
|
ethr_rwmutex_tryrlock() acquired and refused to acquire a lock with
inverted logic. The lock was however never acquired in a thread unsafe
manner. (Thanks to JR Zhang for noting this issue)
|
|
Writer preferred pthread read/write locks has been enabled on Linux.
|
|
The number of spinlocks used when implementing atomic fall-backs when no
native atomic implementation is available has been increased from 16 to
1024.
|
|
Port locks could be prematurely destroyed.
|
|
Support for using gcc's built-in functions for atomic memory access has
been added. This functionallity will be used if available and no other
native atomic implementation in ERTS is available.
|
|
Missing memory barriers in erts_poll() could cause the runtime system to
hang indefinitely.
|
|
* bg/remove-stray-sae-support:
Remove unsupported erlang:blocking_read_file/1
Remove stray SAE support
|
|
* bg/dist_utils:
dist_utils: Eliminate crash when list_to_existing_atom/1 fails
|
|
An example that didn't work previously.
case Foo of
{ok, X} ->
ok;
_ ->
catch file:close(FD)
end.
|
|
Type highlighting reported by Jay Nelson
non_neg_integer() will highlight purple but pos_integer() does not.
Closing record indentation problem reported by Maxim Treskin:
-record(state, {
sequence_number = 1 :: integer()
}).
|
|
|
|
|
|
Hopefully this covers at least some of the common cases and makes the
flymake support more usable as is. The purpose of including the ebin
directory is to support things like behaviours and parse transforms.
|
|
|
|
|
|
Bugfix: a DNS reply with the truncation bit set containing
misleading section length (i.e header claimed length greater
than what was actually in the reply section) in the header
caused decode error in inet_dns.
|
|
Bugfix: when all nameservers return a reply causing decode errors
or when errors enetunreach or econnrefused occured while
contacting them, one or two UDP ports was leaked i.e
left open and forgotten.
|
|
This BIF was only used by the now broken SAE support.
|
|
The experimental Standalone Erlang (SAE) support based on
Joe Armstrong's work has long been broken. Remove the remaining
code and Makefile rules.
|
|
In the following scenario list_to_existing_atom/1 may crash
during handshake:
Start a node in one window:
erl -sname adam@localhost
Start another node in another window:
erl -sname bertil
In this node, ping the first node (use the actual hostname
in the command):
net:ping(adam@hostname).
There will be an error report similar to:
=ERROR REPORT==== 27-May-2010::15:03:14 ===
Error in process <0.40.0> on node 'bertil@hostname' with exit value: {badarg,[{erlang,list_to_existing_atom,
["adam@localhost"]},{dist_util,recv_challenge,1},{dist_util,handshake_we_started,1}]}
Eliminate the crash and the error report by catching the call to
list_to_existing_atom/1 and do a clean shutdown if it fails.
|
|
|
|
|
|
The Erlang scanner has been augmented with two new tokens: .. and ....
|
|
When exchanging groups between nodes pg2 did not remove duplicated members.
This bug was introduced in R13B03 (kernel-2.13.4).
|
|
* sv/format_status-name-handling:
handle {global, term()} names in format_status/2
OTP-8656 sv/format_status-name-handling
Calling sys:get_status() for processes that have globally registered names
that were not atoms would cause a crash. Corrected. (Thanks to Steve
Vinoski.)
|
|
* ks/cleanup-leex:
leex: Clean up as suggested by tidier
OTP-8655 ks/cleanup-leex
|
|
* sv/socket-error-portability:
inet_drv.c: Remove red herring
use macro to portably test for socket system call errors
OTP-8654 sv/socket-error-portability
On some combination of Montavista Linux on Cavium Octeon processors, some
socket-related system calls returned other numbers than -1 for errors. This
caused a core dump in inet_drv.c. Now the code works around this problem.
|
|
|
|
|
|
When given the option {builtins,true} Xref now adds calls to operators.
|
|
wrong shell!
|
|
|
|
|
|
|