aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--erts/configure.in35
-rw-r--r--erts/doc/src/erlang.xml6
-rw-r--r--erts/doc/src/erts_alloc.xml7
-rw-r--r--erts/emulator/beam/erl_alloc_util.c1
-rw-r--r--erts/emulator/beam/erl_gc.c2
-rw-r--r--erts/emulator/beam/erl_message.c2
-rw-r--r--erts/emulator/beam/sys.h38
-rw-r--r--erts/emulator/drivers/win32/winsock_func.h102
-rw-r--r--erts/emulator/sys/common/erl_poll.c3
-rw-r--r--erts/emulator/test/match_spec_SUITE.erl16
-rw-r--r--erts/preloaded/ebin/erlang.beambin94244 -> 94248 bytes
-rw-r--r--erts/preloaded/src/erlang.erl4
-rw-r--r--lib/asn1/src/asn1ct_imm.erl6
-rw-r--r--lib/asn1/test/asn1_SUITE_data/Constraints.py3
-rw-r--r--lib/asn1/test/testConstraints.erl4
-rw-r--r--lib/common_test/doc/src/event_handler_chapter.xml15
-rw-r--r--lib/common_test/doc/src/run_test_chapter.xml6
-rw-r--r--lib/common_test/src/cth_log_redirect.erl9
-rw-r--r--lib/common_test/test/ct_hooks_SUITE.erl43
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl74
-rw-r--r--lib/crypto/c_src/crypto.c5
-rw-r--r--lib/crypto/test/crypto_SUITE.erl13
-rw-r--r--lib/diameter/doc/src/Makefile4
-rw-r--r--lib/diameter/doc/src/diameter.xml150
-rw-r--r--lib/erl_interface/src/connect/ei_resolve.c9
-rw-r--r--lib/erl_interface/src/encode/encode_ulonglong.c2
-rw-r--r--lib/erl_interface/src/legacy/erl_marshal.c2
-rw-r--r--lib/eunit/src/Makefile2
-rw-r--r--lib/ic/c_src/oe_ei_code_erlang_binary.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_atom.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_port.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_ref.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_string.c2
-rw-r--r--lib/ic/c_src/oe_ei_encode_term.c2
-rw-r--r--lib/inets/src/ftp/ftp.erl6
-rw-r--r--lib/runtime_tools/vsn.mk2
-rw-r--r--lib/ssh/src/ssh_cli.erl15
-rw-r--r--lib/tools/c_src/erl_memory.c73
-rw-r--r--lib/wx/c_src/Makefile.in27
-rw-r--r--make/output.mk.in1
40 files changed, 385 insertions, 314 deletions
diff --git a/erts/configure.in b/erts/configure.in
index ba80fdbbbe..bad748d8fe 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -393,30 +393,17 @@ if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes; then
;;
esac
else
- case $host_os in
- darwin*)
- case $CFLAGS in
- *-m32*)
- ;;
- *)
- CFLAGS="-m32 $CFLAGS"
- ;;
- esac
- ;;
- *)
- if test X${enable_m32_build} = Xyes;
- then
- enable_hipe=no;
- case $CFLAGS in
- *-m32*)
- ;;
- *)
- CFLAGS="-m32 $CFLAGS"
- ;;
- esac ;
- fi
- ;;
- esac
+ if test X${enable_m32_build} = Xyes;
+ then
+ enable_hipe=no;
+ case $CFLAGS in
+ *-m32*)
+ ;;
+ *)
+ CFLAGS="-m32 $CFLAGS"
+ ;;
+ esac ;
+ fi
fi
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index 062caadad3..e3ef48a6c1 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -5420,7 +5420,11 @@ ok
As of erts version 5.6.1 the return value is a list
of <c>{instance, InstanceNo, InstanceInfo}</c> tuples
where <c>InstanceInfo</c> contains information about
- a specific instance of the allocator.
+ a specific instance of the allocator. As of erts version
+ 5.10.4 the returned list when calling
+ <c>erlang:system_info({allocator, mseg_alloc})</c> also
+ include an <c>{erts_mmap, _}</c> tuple as one element
+ in the list.
If <c><anno>Alloc</anno></c> is not a recognized allocator,
<c>undefined</c> is returned. If <c><anno>Alloc</anno></c> is disabled,
<c>false</c> is returned.</p>
diff --git a/erts/doc/src/erts_alloc.xml b/erts/doc/src/erts_alloc.xml
index a0ec89f398..49ee740a73 100644
--- a/erts/doc/src/erts_alloc.xml
+++ b/erts/doc/src/erts_alloc.xml
@@ -332,8 +332,11 @@
Set super carrier size (in MB). The super carrier size defaults to
zero; i.e, the super carrier is by default disabled. The super
carrier is a large continuous area in the virtual address space.
- The system will always try to create new carriers in the super
- carrier.
+ <c>mseg_alloc</c> will always try to create new carriers in the super
+ carrier if it exists. Note that the <c>alloc_util</c> framework may
+ create <c>sys_alloc</c> carriers. For more information on this, see the
+ documentation of the <seealso marker="#MMsco"><c>+MMsco</c></seealso>
+ flag.
<br/><br/>
<em>NOTE</em>: The super carrier cannot be enabled nor
disabled on halfword heap systems. This flag will be
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index 3914537d0d..c6cea0185f 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -3570,7 +3570,6 @@ resize_carrier(Allctr_t *allctr, Block_t *old_blk, Uint umem_sz, UWord flags)
/* Old carrier unchanged; restore... */
STAT_SYS_ALLOC_SBC_ALLOC(allctr, old_crr_sz, old_blk_sz);
}
- DEBUG_SAVE_ALIGNMENT(new_crr);
return new_blk;
}
#endif
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 8ba94d89e9..e89725c190 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -2770,7 +2770,7 @@ erts_check_off_heap2(Process *p, Eterm *htop)
refc = erts_refc_read(&u.ext->node->refc, 1);
break;
default:
- ASSERT(!!"erts_check_off_heap2: Invalid thing_word");
+ ASSERT(!"erts_check_off_heap2: Invalid thing_word");
}
ERTS_CHK_OFFHEAP_ASSERT(refc >= 1);
#ifdef ERTS_OFFHEAP_DEBUG_CHK_CIRCULAR_LIST
diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c
index 325d77e911..6a9030fd99 100644
--- a/erts/emulator/beam/erl_message.c
+++ b/erts/emulator/beam/erl_message.c
@@ -46,10 +46,12 @@ ERTS_SCHED_PREF_QUICK_ALLOC_IMPL(message,
+#ifdef DEBUG
static ERTS_INLINE int in_heapfrag(const Eterm* ptr, const ErlHeapFragment *bp)
{
return ((unsigned)(ptr - bp->mem) < bp->used_size);
}
+#endif
void
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index d22f125945..31252ed78f 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.h
@@ -149,9 +149,28 @@ typedef ERTS_SYS_FD_TYPE ErtsSysFdType;
# define ERTS_EXIT_AFTER_DUMP exit
#endif
+/* In VC++, noreturn is a declspec that has to be before the types,
+ * but in GNUC it is an att ribute to be placed between return type
+ * and function name, hence __decl_noreturn <types> __noreturn <function name>
+ */
+#if __GNUC__
+# define __decl_noreturn
+# define __noreturn __attribute__((noreturn))
+#else
+# if defined(__WIN32__) && defined(_MSC_VER)
+# define __noreturn
+# define __decl_noreturn __declspec(noreturn)
+# else
+# define __noreturn
+# define __decl_noreturn
+# endif
+#endif
+
#define ERTS_ASSERT(e) \
((void) ((e) ? 1 : (erl_assert_error(#e, __func__, __FILE__, __LINE__), 0)))
-void erl_assert_error(const char* expr, const char *func, const char* file, int line);
+
+__decl_noreturn void __noreturn erl_assert_error(const char* expr, const char *func,
+ const char* file, int line);
#ifdef DEBUG
# define ASSERT(e) ERTS_ASSERT(e)
@@ -192,23 +211,6 @@ void erl_assert_error(const char* expr, const char *func, const char* file, int
# define erts_align_attribute(SZ)
#endif
-/* In VC++, noreturn is a declspec that has to be before the types,
- * but in GNUC it is an att ribute to be placed between return type
- * and function name, hence __decl_noreturn <types> __noreturn <function name>
- */
-#if __GNUC__
-# define __decl_noreturn
-# define __noreturn __attribute__((noreturn))
-#else
-# if defined(__WIN32__) && defined(_MSC_VER)
-# define __noreturn
-# define __decl_noreturn __declspec(noreturn)
-# else
-# define __noreturn
-# define __decl_noreturn
-# endif
-#endif
-
/*
** Data types:
**
diff --git a/erts/emulator/drivers/win32/winsock_func.h b/erts/emulator/drivers/win32/winsock_func.h
deleted file mode 100644
index 9d2c099c4d..0000000000
--- a/erts/emulator/drivers/win32/winsock_func.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * %CopyrightBegin%
- *
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
- *
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * %CopyrightEnd%
- */
-
-typedef struct _WinSockFuncs {
- int (WSAAPI *WSAStartup)(WORD wVersionRequired, LPWSADATA lpWSAData);
- int (WSAAPI *WSACleanup)(void);
- int (WSAAPI *WSAGetLastError)(void);
- DWORD (WSAAPI *WSAWaitForMultipleEvents) (DWORD cEvents,
- const WSAEVENT FAR * lphEvents,
- BOOL fWaitAll,
- DWORD dwTimeout,
- BOOL fAlertable);
- WSAEVENT (WSAAPI *WSACreateEvent)(void);
- BOOL (WSAAPI *WSACloseEvent)(WSAEVENT hEvent);
-
- BOOL (WSAAPI *WSASetEvent)(WSAEVENT hEvent);
- BOOL (WSAAPI *WSAResetEvent)(WSAEVENT hEvent);
- int (WSAAPI *WSAEventSelect)(SOCKET s, WSAEVENT hEventObject,
- long lNetworkEvents);
- int (WSAAPI *WSAEnumNetworkEvents)(SOCKET s,
- WSAEVENT hEventObject,
- LPWSANETWORKEVENTS lpNetworkEvents);
- int (WSAAPI *WSAIoctl)(SOCKET s,
- DWORD dwIoControlCode,
- LPVOID lpvInBuffer,
- DWORD cbInBuffer,
- LPVOID lpvOUTBuffer,
- DWORD cbOUTBuffer,
- LPDWORD lpcbBytesReturned,
- LPWSAOVERLAPPED lpOverlapped,
- LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE
- );
- SOCKET (WSAAPI *accept)(SOCKET s, struct sockaddr FAR *addr,
- int FAR *addrlen);
- int (WSAAPI *bind)(SOCKET s, const struct sockaddr FAR *addr,
- int namelen);
- int (WSAAPI *closesocket)(SOCKET s);
- int (WSAAPI *connect)(SOCKET s, const struct sockaddr FAR *name,
- int namelen);
- int (WSAAPI *ioctlsocket)(SOCKET s, long cmd, u_long FAR *argp);
- int (WSAAPI *getsockopt)(SOCKET s, int level, int optname,
- char FAR * optval, int FAR *optlen);
- u_long (WSAAPI *htonl)(u_long hostlong);
- u_short (WSAAPI *htons)(u_short hostshort);
- unsigned long (WSAAPI *inet_addr)(const char FAR * cp);
- char FAR * (WSAAPI *inet_ntoa)(struct in_addr in);
- int (WSAAPI *listen)(SOCKET s, int backlog);
- u_short (WSAAPI *ntohs)(u_short netshort);
- int (WSAAPI *recv)(SOCKET s, char FAR * buf, int len, int flags);
- int (WSAAPI *send)(SOCKET s, const char FAR * buf, int len, int flags);
- int (WSAAPI *setsockopt)(SOCKET s, int level, int optname,
- const char FAR * optval, int optlen);
- int (WSAAPI *shutdown)(SOCKET s, int how);
- SOCKET (WSAAPI *socket)(int af, int type, int protocol);
- struct hostent FAR * (WSAAPI *gethostbyname)(const char FAR * name);
- struct hostent FAR * (WSAAPI *gethostbyaddr)(const char FAR *addr,
- int addrlen, int addrtype);
- int (WSAAPI *gethostname)(char FAR * name, int namelen);
- struct servent FAR * (WSAAPI *getservbyname)(const char FAR * name,
- const char FAR * proto);
- struct servent FAR * (WSAAPI *getservbyport)(int port,
- const char FAR * proto);
- int (WSAAPI *getsockname)(SOCKET sock, struct sockaddr FAR *name,
- int FAR *namelen);
-
- /*
- * New, added for inet_drv.
- */
-
- int (WSAAPI *getpeername)(SOCKET s, struct sockaddr FAR * name,
- int FAR * namelen);
- u_long (WSAAPI *ntohl)(u_long netlong);
- int (WSAAPI *WSASend)(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
- LPDWORD lpNumberOfBytesSent, DWORD dwFlags,
- LPWSAOVERLAPPED lpOverlapped,
- LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
- int (WSAAPI *sendto)(SOCKET s, const char FAR * buf, int len,
- int flags, const struct sockaddr FAR * to, int tolen);
- int (WSAAPI *recvfrom)(SOCKET s, char FAR * buf, int len, int flags,
- struct sockaddr FAR * from, int FAR * fromlen);
-} WinSockFuncs;
-
-
-extern WinSockFuncs winSock;
-
-extern int tcp_lookup_functions(void);
diff --git a/erts/emulator/sys/common/erl_poll.c b/erts/emulator/sys/common/erl_poll.c
index 7676d8872a..0a58a625b2 100644
--- a/erts/emulator/sys/common/erl_poll.c
+++ b/erts/emulator/sys/common/erl_poll.c
@@ -2510,7 +2510,8 @@ ERTS_POLL_EXPORT(erts_poll_destroy_pollset)(ErtsPollSet ps)
pollsets = pollsets->next;
else {
ErtsPollSet prev_ps;
- for (prev_ps = pollsets; ps != prev_ps->next; prev_ps = prev_ps->next);
+ for (prev_ps = pollsets; ps != prev_ps->next; prev_ps = prev_ps->next)
+ ;
ASSERT(ps == prev_ps->next);
prev_ps->next = ps->next;
}
diff --git a/erts/emulator/test/match_spec_SUITE.erl b/erts/emulator/test/match_spec_SUITE.erl
index b56b7ce525..bcc46d78ba 100644
--- a/erts/emulator/test/match_spec_SUITE.erl
+++ b/erts/emulator/test/match_spec_SUITE.erl
@@ -213,7 +213,7 @@ test_3(Config) when is_list(Config) ->
otp_9422(doc) -> [];
otp_9422(Config) when is_list(Config) ->
- Laps = 1000,
+ Laps = 10000,
?line Fun1 = fun() -> otp_9422_tracee() end,
?line P1 = spawn_link(?MODULE, loop_runner, [self(), Fun1, Laps]),
io:format("spawned ~p as tracee\n", [P1]),
@@ -230,7 +230,7 @@ otp_9422(Config) when is_list(Config) ->
%%receive after 10*1000 -> ok end,
stop_collect(P1),
- stop_collect(P2),
+ stop_collect(P2, abort),
ok.
otp_9422_tracee() ->
@@ -975,7 +975,9 @@ start_collect(P) ->
P ! {go, self()}.
stop_collect(P) ->
- P ! {done, self()},
+ stop_collect(P, done).
+stop_collect(P, Order) ->
+ P ! {Order, self()},
receive
{gone, P} ->
ok
@@ -1008,7 +1010,13 @@ loop_runner_cont(_Collector, _Fun, Laps, Laps) ->
end;
loop_runner_cont(Collector, Fun, N, Laps) ->
Fun(),
- loop_runner_cont(Collector, Fun, N+1, Laps).
+ receive
+ {abort, Collector} ->
+ io:format("loop_runner ~p aborted after ~p of ~p laps\n", [self(), N+1, Laps]),
+ Collector ! {gone, self()}
+ after 0 ->
+ loop_runner_cont(Collector, Fun, N+1, Laps)
+ end.
f1(X) ->
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index 5a9ffa89d1..c53f6407f0 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index 2b6760c675..291926578e 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.erl
@@ -1073,8 +1073,8 @@ module_loaded(_Module) ->
%% monitor/2
-spec monitor(Type, Item) -> MonitorRef when
Type :: process,
- Item :: pid() | Module | {Module, Node},
- Module :: module(),
+ Item :: pid() | RegName | {RegName, Node},
+ RegName :: module(),
Node :: node(),
MonitorRef :: reference().
monitor(_Type, _Item) ->
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl
index 20785cda8c..047156fc10 100644
--- a/lib/asn1/src/asn1ct_imm.erl
+++ b/lib/asn1/src/asn1ct_imm.erl
@@ -2155,8 +2155,10 @@ fixup_put_bits(Other) -> per_fixup(Other).
%% returns a value range that has the lower bound set to the lowest value
%% of all single values and lower bound values in C and the upper bound to
%% the greatest value.
-effective_constraint(integer,[C={{_,_},_}|_Rest]) -> % extension
- [C];
+effective_constraint(integer, [{{_,_}=Root,_}|_Rest]) ->
+ %% Normalize extension. Note that any range given for the
+ %% extension should be ignored anyway.
+ [{Root,[]}];
effective_constraint(integer, C) ->
SVs = get_constraints(C, 'SingleValue'),
SV = effective_constr('SingleValue', SVs),
diff --git a/lib/asn1/test/asn1_SUITE_data/Constraints.py b/lib/asn1/test/asn1_SUITE_data/Constraints.py
index 864a471b88..c3b3aebd6d 100644
--- a/lib/asn1/test/asn1_SUITE_data/Constraints.py
+++ b/lib/asn1/test/asn1_SUITE_data/Constraints.py
@@ -16,6 +16,9 @@ SemiConstrained ::= INTEGER (100..MAX)
NegSemiConstrained ::= INTEGER (-128..MAX)
SemiConstrainedExt ::= INTEGER (42..MAX, ...)
NegSemiConstrainedExt ::= INTEGER (-128..MAX, ...)
+-- Extensions --
+LongLongExt ::= INTEGER (0..18446744073709551615, ..., -5000..-1)
+Range256to65536Ext ::= INTEGER (256..65536, ..., 1000000..9000000)
-- Union of single values
Sv1 ::= INTEGER (2|3|17)
diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl
index 23322f5e88..54ba748519 100644
--- a/lib/asn1/test/testConstraints.erl
+++ b/lib/asn1/test/testConstraints.erl
@@ -70,6 +70,8 @@ int_constraints(Rules) ->
%%==========================================================
LastNumWithoutLengthEncoding = 65536,
roundtrip('Range256to65536', LastNumWithoutLengthEncoding),
+ roundtrip('Range256to65536Ext', LastNumWithoutLengthEncoding),
+ roundtrip('Range256to65536Ext', 42),
FirstNumWithLengthEncoding = 65537,
roundtrip('LargeConstraints', 'RangeMax', FirstNumWithLengthEncoding),
@@ -95,6 +97,8 @@ int_constraints(Rules) ->
%% Random number within longlong range
LongLong = 12672809400538808320,
roundtrip('LongLong', LongLong),
+ roundtrip('LongLongExt', LongLong),
+ roundtrip('LongLongExt', -10000),
%%==========================================================
%% Constraint Combinations (Duboisson p. 285)
diff --git a/lib/common_test/doc/src/event_handler_chapter.xml b/lib/common_test/doc/src/event_handler_chapter.xml
index 3cc21f28de..a231653558 100644
--- a/lib/common_test/doc/src/event_handler_chapter.xml
+++ b/lib/common_test/doc/src/event_handler_chapter.xml
@@ -193,7 +193,8 @@
<p><c>GroupName = unknown | atom()</c>, name of the group
(unknown if init- or end function times out).</p>
<p><c>GroupProperties = list()</c>, list of execution properties for the group.</p>
- <p><c>Result = ok | {skipped,SkipReason} | {failed,FailReason}</c>, the result.</p>
+ <p><c>Result = ok | {auto_skipped,SkipReason} | {skipped,SkipReason} | {failed,FailReason}</c>,
+ the result.</p>
<marker id="skipreason"/>
<p><c>SkipReason = {require_failed,RequireInfo} |
{require_failed_in_suite0,RequireInfo} |
@@ -228,7 +229,9 @@
<marker id="tc_auto_skip"></marker>
<c>#event{name = tc_auto_skip, data = {Suite,Func,Reason}}</c>
<p><c>Suite = atom()</c>, the name of the suite.</p>
- <p><c>Func = atom()</c>, the name of the test case or configuration function.</p>
+ <p><c>Func = atom() | {end_per_group,GroupName}</c>, the name of the test case
+ or configuration function.</p>
+ <p><c>GroupName = atom()</c>, name of the group.</p>
<p><c>Reason = {failed,FailReason} |
{require_failed_in_suite0,RequireInfo}</c>,
reason for auto skipping <c>Func</c>.</p>
@@ -254,9 +257,11 @@
<item>
<marker id="tc_user_skip"></marker>
- <c>#event{name = tc_user_skip, data = {Suite,TestCase,Comment}}</c>
- <p><c>Suite = atom()</c>, name of the suite.</p>
- <p><c>TestCase = atom()</c>, name of the test case.</p>
+ <c>#event{name = tc_user_skip, data = {Suite,Func,Comment}}</c>
+ <p><c>Suite = atom()</c>, the name of the suite.</p>
+ <p><c>Func = atom() | {end_per_group,GroupName}</c>, the name of the test case
+ or configuration function.</p>
+ <p><c>GroupName = atom()</c>, name of the group.</p>
<p><c>Comment = string()</c>, reason for skipping the test case.</p>
<p>This event specifies that a test case has been skipped by the user.
It is only ever received if the skip was declared in a test specification.
diff --git a/lib/common_test/doc/src/run_test_chapter.xml b/lib/common_test/doc/src/run_test_chapter.xml
index 6b37e183dd..fad0510049 100644
--- a/lib/common_test/doc/src/run_test_chapter.xml
+++ b/lib/common_test/doc/src/run_test_chapter.xml
@@ -205,12 +205,12 @@
<p>The <c>ct_run</c> program sets the exit status before shutting down. The following values
are defined:</p>
<list>
- <item><c>0</c> indicates a successful testrun, i.e. one without failed or auto-skipped test cases.</item>
- <item><c>1</c> indicates that one or more test cases have failed, or have been auto-skipped.</item>
+ <item><c>0</c> indicates a successful testrun, i.e. one without failed or auto skipped test cases.</item>
+ <item><c>1</c> indicates that one or more test cases have failed, or have been auto skipped.</item>
<item><c>2</c> indicates that the test execution has failed because of e.g. compilation errors, an
illegal return value from an info function, etc.</item>
</list>
- <p>If auto-skipped test cases should not affect the exit status, you may change the default
+ <p>If auto skipped test cases should not affect the exit status, you may change the default
behaviour using start flag:</p>
<pre>-exit_status ignore_config</pre>
diff --git a/lib/common_test/src/cth_log_redirect.erl b/lib/common_test/src/cth_log_redirect.erl
index 8fed341600..61700a2032 100644
--- a/lib/common_test/src/cth_log_redirect.erl
+++ b/lib/common_test/src/cth_log_redirect.erl
@@ -73,7 +73,7 @@ pre_init_per_group(Group, Config, State) ->
set_curr_func({group,Group,init_per_group}, Config),
{Config, State}.
-post_init_per_group(Group, Config, Result, tc_log_async) ->
+post_init_per_group(Group, Config, Result, tc_log_async) when is_list(Config) ->
case lists:member(parallel,proplists:get_value(
tc_group_properties,Config,[])) of
true ->
@@ -154,7 +154,8 @@ handle_info(_, State) ->
handle_call(flush,State) ->
{ok, ok, State};
-handle_call({set_curr_func,{group,Group,Conf},Config}, State) ->
+handle_call({set_curr_func,{group,Group,Conf},Config},
+ State) when is_list(Config) ->
Parallel = case proplists:get_value(tc_group_properties, Config) of
undefined -> false;
Props -> lists:member(parallel, Props)
@@ -162,6 +163,10 @@ handle_call({set_curr_func,{group,Group,Conf},Config}, State) ->
{ok, ok, State#eh_state{curr_group = Group,
curr_func = Conf,
parallel_tcs = Parallel}};
+handle_call({set_curr_func,{group,Group,Conf},_SkipOrFail}, State) ->
+ {ok, ok, State#eh_state{curr_group = Group,
+ curr_func = Conf,
+ parallel_tcs = false}};
handle_call({set_curr_func,{group,undefined},_Config}, State) ->
{ok, ok, State#eh_state{curr_group = undefined,
curr_func = undefined,
diff --git a/lib/common_test/test/ct_hooks_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE.erl
index 083c87b49e..b5855da9df 100644
--- a/lib/common_test/test/ct_hooks_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE.erl
@@ -80,7 +80,7 @@ all(suite) ->
scope_per_suite_state_cth, scope_per_group_state_cth,
scope_suite_state_cth,
fail_pre_suite_cth, double_fail_pre_suite_cth,
- fail_post_suite_cth, skip_pre_suite_cth,
+ fail_post_suite_cth, skip_pre_suite_cth, skip_pre_end_cth,
skip_post_suite_cth, recover_post_suite_cth, update_config_cth,
state_update_cth, options_cth, same_id_cth,
fail_n_skip_with_minimal_cth, prio_cth, no_config,
@@ -181,6 +181,10 @@ skip_pre_suite_cth(Config) when is_list(Config) ->
do_test(skip_pre_suite_cth, "ct_cth_empty_SUITE.erl",
[skip_pre_suite_cth],Config).
+skip_pre_end_cth(Config) when is_list(Config) ->
+ do_test(skip_pre_end_cth, "ct_scope_per_group_cth_SUITE.erl",
+ [skip_pre_end_cth],Config).
+
skip_post_suite_cth(Config) when is_list(Config) ->
do_test(skip_post_suite_cth, "ct_cth_empty_SUITE.erl",
[skip_post_suite_cth],Config).
@@ -759,6 +763,43 @@ test_events(skip_pre_suite_cth) ->
{?eh,stop_logging,[]}
];
+test_events(skip_pre_end_cth) ->
+ [
+ {?eh,start_logging,{'DEF','RUNDIR'}},
+ {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
+ {?eh,tc_start,{ct_scope_per_group_cth_SUITE,init_per_suite}},
+ {?eh,tc_done,{ct_scope_per_group_cth_SUITE,init_per_suite,ok}},
+
+ [{?eh,tc_start,{ct_scope_per_group_cth_SUITE,{init_per_group,group1,[]}}},
+ {?eh,cth,{'_',id,[[]]}},
+ {?eh,cth,{'_',init,['_',[]]}},
+ {?eh,cth,{'_',post_init_per_group,[group1,'$proplist','$proplist',[]]}},
+ {?eh,tc_done,{ct_scope_per_group_cth_SUITE,{init_per_group,group1,[]},ok}},
+
+ {?eh,tc_start,{ct_scope_per_group_cth_SUITE,test_case}},
+ {?eh,cth,{'_',pre_init_per_testcase,[test_case,'$proplist',[]]}},
+ {?eh,cth,{'_',post_end_per_testcase,[test_case,'$proplist',ok,[]]}},
+ {?eh,tc_done,{ct_scope_per_group_cth_SUITE,test_case,ok}},
+
+ {?eh,tc_start,{ct_scope_per_group_cth_SUITE,{end_per_group,group1,[]}}},
+ {?eh,cth,{'_',pre_end_per_group,[group1,'$proplist',[]]}},
+ {?eh,cth,{'_',post_end_per_group,[group1,'$proplist','_',[]]}},
+ {?eh,tc_done,{ct_scope_per_group_cth_SUITE,{end_per_group,group1,[]},
+ {skipped,"Test skip"}}}],
+ {?eh,cth,{'_',on_tc_skip,[end_per_group,
+ {tc_user_skip,{skipped,"Test skip"}},
+ []]}},
+ {?eh,tc_start,{ct_scope_per_group_cth_SUITE,end_per_suite}},
+ {?eh,tc_done,{ct_scope_per_group_cth_SUITE,end_per_suite,
+ {skipped,"Test skip"}}},
+ {?eh,cth,{'_',on_tc_skip,[end_per_suite,
+ {tc_user_skip,{skipped,"Test skip"}},
+ []]}},
+ {?eh,test_done,{'DEF','STOP_TIME'}},
+ {?eh,cth,{'_',terminate,[[]]}},
+ {?eh,stop_logging,[]}
+ ];
+
test_events(skip_post_suite_cth) ->
[
{?eh,start_logging,{'DEF','RUNDIR'}},
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl
new file mode 100644
index 0000000000..ece4eb2247
--- /dev/null
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl
@@ -0,0 +1,74 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(skip_pre_end_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State),
+ {{skip, "Test skip"}, State}.
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State),
+ {{skip, "Test skip"}, State}.
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c
index c28ff8136c..42fb172953 100644
--- a/lib/crypto/c_src/crypto.c
+++ b/lib/crypto/c_src/crypto.c
@@ -2658,8 +2658,9 @@ static ERL_NIF_TERM srp_user_secret_nif(ErlNifEnv* env, int argc, const ERL_NIF_
<premaster secret> = (B - (k * g^x)) ^ (a + (u * x)) % N
*/
BIGNUM *bn_exponent = NULL, *bn_a = NULL;
- BIGNUM *bn_u, *bn_multiplier, *bn_exp2, *bn_base,
- *bn_prime, *bn_generator, *bn_B, *bn_result;
+ BIGNUM *bn_u = NULL, *bn_multiplier = NULL, *bn_exp2,
+ *bn_base, *bn_prime = NULL, *bn_generator = NULL,
+ *bn_B = NULL, *bn_result;
BN_CTX *bn_ctx;
unsigned char* ptr;
unsigned dlen;
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index 645b1203ef..ddc9607e29 100644
--- a/lib/crypto/test/crypto_SUITE.erl
+++ b/lib/crypto/test/crypto_SUITE.erl
@@ -144,7 +144,7 @@ hash() ->
[{doc, "Test all different hash functions"}].
hash(Config) when is_list(Config) ->
{Type, MsgsLE, Digests} = proplists:get_value(hash, Config),
- Msgs = lists:map(fun lazy_eval/1, MsgsLE),
+ Msgs = lazy_eval(MsgsLE),
[LongMsg | _] = lists:reverse(Msgs),
Inc = iolistify(LongMsg),
[IncrDigest | _] = lists:reverse(Digests),
@@ -156,7 +156,7 @@ hmac() ->
[{doc, "Test all different hmac functions"}].
hmac(Config) when is_list(Config) ->
{Type, Keys, DataLE, Expected} = proplists:get_value(hmac, Config),
- Data = lists:map(fun lazy_eval/1, DataLE),
+ Data = lazy_eval(DataLE),
hmac(Type, Keys, Data, Expected),
hmac(Type, lists:map(fun iolistify/1, Keys), lists:map(fun iolistify/1, Data), Expected),
hmac_increment(Type).
@@ -173,7 +173,8 @@ block(Config) when is_list(Config) ->
stream() ->
[{doc, "Test stream ciphers"}].
stream(Config) when is_list(Config) ->
- Streams = proplists:get_value(stream, Config),
+ Streams = lazy_eval(proplists:get_value(stream, Config)),
+
lists:foreach(fun stream_cipher/1, Streams),
lists:foreach(fun stream_cipher/1, stream_iolistify(Streams)),
lists:foreach(fun stream_cipher_incment/1, stream_iolistify(Streams)).
@@ -803,6 +804,8 @@ long_msg() ->
%% test_server crash with 'no_answer_from_tc_supervisor' sometimes on some
%% machines. Therefore lazy evaluation when test case has started.
lazy_eval(F) when is_function(F) -> F();
+lazy_eval(Lst) when is_list(Lst) -> lists:map(fun lazy_eval/1, Lst);
+lazy_eval(Tpl) when is_tuple(Tpl) -> list_to_tuple(lists:map(fun lazy_eval/1, tuple_to_list(Tpl)));
lazy_eval(Term) -> Term.
long_sha_digest() ->
@@ -1253,7 +1256,7 @@ blowfish_ofb64() ->
rc4() ->
[{rc4, <<"apaapa">>, <<"Yo baby yo">>},
{rc4, <<"apaapa">>, list_to_binary(lists:seq(0, 255))},
- {rc4, <<"apaapa">>, lists:duplicate(1000000, $a)}
+ {rc4, <<"apaapa">>, long_msg()}
].
aes_ctr() ->
@@ -1301,7 +1304,7 @@ aes_ctr() ->
{aes_ctr, hexstr2bin("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"),
hexstr2bin("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"),
- lists:duplicate(1000000, $a)}
+ long_msg()}
].
rsa_plain() ->
diff --git a/lib/diameter/doc/src/Makefile b/lib/diameter/doc/src/Makefile
index bd2b6b103a..229812fd08 100644
--- a/lib/diameter/doc/src/Makefile
+++ b/lib/diameter/doc/src/Makefile
@@ -82,6 +82,7 @@ gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
man: $(MAN1_FILES) $(MAN3_FILES) $(MAN4_FILES)
$(INDEX_TARGET): $(INDEX_SRC) $(APP_FILE)
+ $(gen_verbose) \
sed -e 's/%VSN%/$(VSN)/; \
s/%ERLANG_SITE%/www\.erlang\.se\//; \
s/%UP_ONE_LEVEL%/..\/..\/..\/doc\/index.html/; \
@@ -140,7 +141,10 @@ release_spec:
depend.mk: depend.sed Makefile seealso.ent \
$(XML_REF_FILES) $(XML_CHAPTER_FILES)
+ $(gen_verbose)
+ $(V_at) \
sed -f seehere.sed seealso.ent > seehere.ent
+ $(V_at) \
(for f in $(XML_REF_FILES) $(XML_CHAPTER_FILES); do \
sed -f $< $$f | sed "s@%FILE%@`basename $$f .xml`@g"; \
done) \
diff --git a/lib/diameter/doc/src/diameter.xml b/lib/diameter/doc/src/diameter.xml
index 726343abb2..9864b21bc5 100644
--- a/lib/diameter/doc/src/diameter.xml
+++ b/lib/diameter/doc/src/diameter.xml
@@ -130,7 +130,7 @@ ExtraArgs = list()
<p>
A module implementing the callback interface defined in &man_app;,
along with any
-extra arguments to be appended to those documented for the interface.
+extra arguments to be appended to those documented.
Note that extra arguments specific to an outgoing request can be
specified to &call;, in which case
those are are appended to any module-specific extra arguments.</p>
@@ -138,7 +138,7 @@ those are are appended to any module-specific extra arguments.</p>
<p>
Specifying a <c>#diameter_callback{}</c> record allows individual
functions to be configured in place of the usual &man_app; callbacks.
-See that module for details.</p>
+See <c>diameter_callback.erl</c> for details.</p>
<marker id="application_opt"/>
</item>
@@ -155,7 +155,7 @@ Has one the following types.</p>
<tag><c>{alias, &application_alias;}</c></tag>
<item>
<p>
-An unique identifier for the application in the scope of the
+A unique identifier for the application in the scope of the
service.
Defaults to the value of the <c>dictionary</c> option if
unspecified.</p>
@@ -166,8 +166,8 @@ unspecified.</p>
<p>
The name of an encode/decode module for the Diameter
messages defined by the application.
-These modules are generated from a specification file whose format is
-documented in &man_dict;.</p>
+These modules are generated from files whose format is documented in
+&man_dict;.</p>
</item>
<tag><c>{module, &application_module;}</c></tag>
@@ -195,15 +195,14 @@ Specifies whether or not the &app_pick_peer;
application callback can modify the application state.
Defaults to <c>false</c> if unspecified.</p>
-<note>
+<warning>
<p>
-&app_pick_peer; callbacks
-are serialized when these are allowed to modify state, which is a
-potential performance bottleneck.
+&app_pick_peer; callbacks are serialized when this option is <c>true</c>,
+which is a potential performance bottleneck.
A simple Diameter client may suffer no ill effects from using mutable
state but a server or agent that responds to incoming request should
probably avoid it.</p>
-</note>
+</warning>
</item>
<tag><c>{answer_errors, callback|report|discard}</c></tag>
@@ -234,7 +233,7 @@ Defaults to <c>report</c> if unspecified.</p>
<item>
<p>
Determines the manner in which incoming requests are handled when an
-error other than 3007, DIAMETER_APPLICATION_UNSUPPORTED (which cannot
+error other than 3007 (DIAMETER_APPLICATION_UNSUPPORTED, which cannot
be associated with an application callback module), is detected.</p>
<p>
@@ -244,7 +243,8 @@ If <c>answer</c> then even 5xxx errors are answered without a
callback unless the connection in question has configured the RFC 3588
common dictionary as noted below.
If <c>callback</c> then a &app_handle_request; callback always takes
-place and the return value determines the answer sent to the peer.</p>
+place and its return value determines the answer sent to the peer, if
+any.</p>
<p>
Defaults to <c>answer_3xxx</c> if unspecified.</p>
@@ -252,13 +252,14 @@ Defaults to <c>answer_3xxx</c> if unspecified.</p>
<note>
<p>
Answers sent by diameter set the E-bit in the Diameter Header.
-Since RFC 3588 allowed only 3xxx result codes in an
+Since RFC 3588 allows only 3xxx result codes in an
<c>answer-message</c>, <c>answer</c> has the same semantics as
-<c>answer_3xxx</c> if the peer connection in question has configured
-the RFC 3588 common dictionary, <c>diameter_gen_base_rfc3588</c>.
-RFC 6733 allows both 3xxx and 5xxx result codes in an
-<c>answer-message</c> so a connection configured with the RFC 6733
-common dictionary, <c>diameter_gen_base_rfc6733</c>, does
+<c>answer_3xxx</c> when the transport in question has
+been configured with <c>diameter_gen_base_rfc3588</c> as its common
+dictionary.
+Since RFC 6733 allows both 3xxx and 5xxx result codes in an
+<c>answer-message</c>, a transport with
+<c>diameter_gen_base_rfc6733</c> as its common dictionary does
distinguish between <c>answer_3xxx</c> and <c>answer</c>.</p>
</note>
</item>
@@ -291,9 +292,8 @@ Multiple options append to the argument list.</p>
<tag><c>{filter, &peer_filter;}</c></tag>
<item>
<p>
-A filter to apply to the list of available peers before passing them to
-the &app_pick_peer;
-callback for the application in question.
+A filter to apply to the list of available peers before passing it to
+the &app_pick_peer; callback for the application in question.
Multiple options are equivalent a single <c>all</c> filter on the
corresponding list of filters.
Defaults to <c>none</c>.</p>
@@ -312,7 +312,7 @@ Defaults to 5000.</p>
<p>
Causes &call; to return <c>ok</c> as
soon as the request in
-question has been encoded instead of waiting for and returning
+question has been encoded, instead of waiting for and returning
the result from a subsequent &app_handle_answer; or
&app_handle_error; callback.</p>
</item>
@@ -331,8 +331,8 @@ An invalid option will cause &call; to fail.</p>
<p>
AVP values sent in outgoing CER or CEA messages during capabilities
exchange.
-Can be configured both on a service and a transport, values specified
-on the latter taking precedence over any specified on the former.
+Can be configured both on a service and a transport, values
+on the latter taking precedence.
Has one of the following types.</p>
<taglist>
@@ -358,7 +358,7 @@ question communicates an address list as described in
Origin-State-Id is optional but will be included in outgoing messages
sent by diameter itself: CER/CEA, DWR/DWA and DPR/DPA.
Setting a value of <c>0</c> (zero) is equivalent to not setting a
-value as documented in &the_rfc;.
+value, as documented in &the_rfc;.
The function &origin_state_id;
can be used as to retrieve a value that is computed when the diameter
application is started.</p>
@@ -370,8 +370,8 @@ application is started.</p>
<item>
<p>
Inband-Security-Id defaults to the empty list, which is equivalent to a
-list containing only 0 (= NO_INBAND_SECURITY).
-If 1 (= TLS) is specified then TLS is selected if the CER/CEA received
+list containing only 0 (NO_INBAND_SECURITY).
+If 1 (TLS) is specified then TLS is selected if the CER/CEA received
from the peer offers it.</p>
</item>
@@ -437,38 +437,38 @@ Has one of the following types.</p>
<p>
Matches any peer.
This is a convenience that provides a filter equivalent to no
-filter at all.</p>
+filter.</p>
</item>
<tag><c>host</c></tag>
<item>
<p>
-Matches only those peers whose <c>Origin-Host</c> has the same value
-as <c>Destination-Host</c> in the outgoing request in question,
+Matches only those peers whose Origin-Host has the same value
+as Destination-Host in the outgoing request in question,
or any peer if the request does not contain
-a <c>Destination-Host</c> AVP.</p>
+a Destination-Host AVP.</p>
</item>
<tag><c>realm</c></tag>
<item>
<p>
-Matches only those peers whose <c>Origin-Realm</c> has the same value
-as <c>Destination-Realm</c> in the outgoing request in question,
+Matches only those peers whose Origin-Realm has the same value
+as Destination-Realm in the outgoing request in question,
or any peer if the request does not contain
-a <c>Destination-Realm</c> AVP.</p>
+a Destination-Realm AVP.</p>
</item>
<tag><c>{host, any|&dict_DiameterIdentity;}</c></tag>
<item>
<p>
-Matches only those peers whose <c>Origin-Host</c> has the
+Matches only those peers whose Origin-Host has the
specified value, or all peers if the atom <c>any</c>.</p>
</item>
<tag><c>{realm, any|&dict_DiameterIdentity;</c></tag>
<item>
<p>
-Matches only those peers whose <c>Origin-Realm</c> has the
+Matches only those peers whose Origin-Realm has the
specified value, or all peers if the atom <c>any</c>.</p>
</item>
@@ -477,7 +477,8 @@ specified value, or all peers if the atom <c>any</c>.</p>
<p>
Matches only those peers for which the specified
<c>&evaluable;</c> returns
-<c>true</c> on the connection's <c>diameter_caps</c> record.
+<c>true</c> when applied to the connection's <c>diameter_caps</c>
+record.
Any other return value or exception is equivalent to <c>false</c>.</p>
</item>
@@ -508,10 +509,10 @@ that matches no peer.</p>
<note>
<p>
-The <c>host</c> and <c>realm</c> filters examine the
-outgoing request as passed to &call;,
-assuming that this is a record- or list-valued <c>&codec_message;</c>,
-and that the message contains at most one of each AVP.
+The <c>host</c> and <c>realm</c> filters cause the Destination-Host
+and Destination-Realm AVPs to be extracted from the
+outgoing request, assuming it to be a record- or list-valued
+<c>&codec_message;</c>, and assuming at most one of each AVP.
If this is not the case then the <c>{host|realm, &dict_DiameterIdentity;}</c>
filters must be used to achieve the desired result.
An empty <c>&dict_DiameterIdentity;</c>
@@ -555,7 +556,7 @@ Can have one of the following types.</p>
<p>
The service is being started or stopped.
No event precedes a <c>start</c> event.
-No event follows a <c>stop</c> event and this event
+No event follows a <c>stop</c> event, and this event
implies the termination of all transport processes.</p>
</item>
@@ -576,9 +577,8 @@ transitioned into (<c>up</c>) or out of (<c>down</c>) the OKAY
state.
If a <c>#diameter_packet{}</c> is present in an <c>up</c> event
then there has been a capabilities exchange on a newly established
-transport connection and the record contains the received CER or CEA.
-Otherwise a connection has reestablished without the loss or
-connectivity.</p>
+transport connection and the record contains the received CER or
+CEA.</p>
<p>
Note that a single <c>up</c> or <c>down</c> event for a given peer
@@ -627,10 +627,10 @@ CB = &evaluable;
</pre>
<p>
-An incoming CER has been answered with the indicated result code or
+An incoming CER has been answered with the indicated result code, or
discarded.
-<c>Caps</c> contains pairs of values for the local node and remote
-peer.
+<c>Caps</c> contains pairs of values, for the local node and remote
+peer respectively.
<c>Pkt</c> contains the CER in question.
In the case of rejection by a capabilities callback, the tuple
contains the rejecting callback.</p>
@@ -647,7 +647,7 @@ Pkt = #diameter_packet{}
<p>
An incoming CER contained errors and has been answered with the
indicated result code.
-<c>Caps</c> contains only values for the local node.
+<c>Caps</c> contains values for the local node only.
<c>Pkt</c> contains the CER in question.</p>
</item>
@@ -754,7 +754,7 @@ Defines a Diameter application supported by the service.</p>
<p>
A service must configure one tuple for each Diameter
application it intends to support.
-For an outgoing Diameter request, the relevant <c>&application_alias;</c> is
+For an outgoing request, the relevant <c>&application_alias;</c> is
passed to &call;, while for an
incoming request the application identifier in the message
header determines the application, the identifier being specified in
@@ -778,10 +778,11 @@ be matched by corresponding &capability; configuration, of
<item>
<p>
Specifies the degree to which the service allows multiple transport
-connections to the same peer.</p>
+connections to the same peer, as identified by its Origin-Host
+at capabilities exchange.</p>
<p>
-If type <c>[node()]</c> then a connection is rejected if another already
+If <c>[node()]</c> then a connection is rejected if another already
exists on any of the specified nodes.
Types <c>false</c>, <c>node</c>, <c>nodes</c> and
&evaluable; are equivalent to
@@ -803,7 +804,7 @@ Defaults to <c>nodes</c>.</p>
<item>
<p>
Specifies a constant value <c>H</c> for the topmost <c>32-N</c> bits of
-of 32-bit End-to-End and Hop-by-Hop identifiers generated
+of 32-bit End-to-End and Hop-by-Hop Identifiers generated
by the service, either explicitly or as a return value of a function
to be evaluated at &start_service;.
In particular, an identifier <c>Id</c> is mapped to a new identifier
@@ -812,11 +813,11 @@ as follows.</p>
(H bsl N) bor (Id band ((1 bsl N) - 1))
</pre>
<p>
-Note that &the_rfc; requires that End-to-End identifiers remain unique
+Note that &the_rfc; requires that End-to-End Identifiers remain unique
for a period of at least 4 minutes and that this and the call rate
-places a lower bound on the appropriate values of <c>N</c>:
-at a rate of <c>R</c> requests per second an <c>N</c>-bit counter
-traverses all of its values in <c>(1 bsl N) div (R*60)</c> minutes so
+places a lower bound on appropriate values of <c>N</c>:
+at a rate of <c>R</c> requests per second, an <c>N</c>-bit counter
+traverses all of its values in <c>(1 bsl N) div (R*60)</c> minutes, so
the bound is <c>4*R*60 =&lt; 1 bsl N</c>.</p>
<p><c>N</c> must lie in the range <c>0..32</c> and <c>H</c> must be a
@@ -829,7 +830,7 @@ Defaults to <c>{0,32}</c>.</p>
<p>
Multiple Erlang nodes implementing the same Diameter node should
be configured with different sequence masks to ensure that each node
-uses a unique range of End-to-End and Hop-by-Hop identifiers for
+uses a unique range of End-to-End and Hop-by-Hop Identifiers for
outgoing requests.</p>
</warning>
</item>
@@ -852,7 +853,7 @@ by the specified function, evaluated whenever a peer connection
becomes available or a remote service requests information about local
connections.
The value <c>true</c> is equivalent to <c>fun &nodes;</c>.
-The value <c>node()</c> in a node list is ignored, so a collection of
+The value <c>node()</c> in a list is ignored, so a collection of
services can all be configured to share with the same list of
nodes.</p>
@@ -899,7 +900,7 @@ If <c>evaluable()</c> then only peers returned by the specified
function are used, evaluated whenever a remote service communicates
information about an available peer connection.
The value <c>true</c> is equivalent to <c>fun &nodes;</c>.
-The value <c>node()</c> in a node list is ignored.</p>
+The value <c>node()</c> in a list is ignored.</p>
<p>
Defaults to <c>false</c>.</p>
@@ -1021,8 +1022,8 @@ case the corresponding callbacks are applied until either all return
The number of milliseconds after which a transport process having an
established transport connection will be terminated if the expected
capabilities exchange message (CER or CEA) is not received from the peer.
-For a connecting transport, the timing of reconnection attempts is
-governed by &watchdog_timer; or &connect_timer; expiry.
+For a connecting transport, the timing of connection attempts is
+governed by &connect_timer; or &watchdog_timer; expiry.
For a listening transport, the peer determines the timing.</p>
<p>
@@ -1038,16 +1039,17 @@ Tc = &dict_Unsigned32;
<p>
For a connecting transport, the &the_rfc; Tc timer, in milliseconds.
-Note that this timer determines the frequency with which a transport
-will attempt to establish an initial connection with its peer
-following transport configuration: once an initial connection has been
-established it's &watchdog_timer; that determines the frequency of
+This timer determines the frequency with which a transport
+attempts to establish an initial connection with its peer
+following transport configuration.
+Once an initial connection has been
+established, &watchdog_timer; determines the frequency of
reconnection attempts, as required by RFC 3539.</p>
<p>
For a listening transport, the timer specifies the time after which a
previously connected peer will be forgotten: a connection after this time is
-regarded as an initial connection rather than a reestablishment,
+regarded as an initial connection rather than reestablishment,
causing the RFC 3539 state machine to pass to state OKAY rather than
REOPEN.
Note that these semantics are not governed by the RFC and
@@ -1066,14 +1068,12 @@ transport.</p>
<p>
A callback invoked prior to terminating the transport process of a
transport connection having watchdog state <c>OKAY</c>.
-Applied to <c>Reason=transport|service|application</c> and the
-<c>&transport_ref;</c> and
-<c>&app_peer;</c>
-in question, <c>Reason</c> indicating whether the diameter
-application is being stopped, the service in question is being stopped
-at &stop_service; or
-the transport in question is being removed at &remove_transport;,
-respectively.</p>
+Applied to <c>application|service|transport</c> and the
+<c>&transport_ref;</c> and <c>&app_peer;</c> in question:
+<c>application</c> indicates that the diameter application is
+being stopped, <c>service</c> that the service in question is being
+stopped by &stop_service;, and <c>transport</c> that the transport in
+question is being removed by &remove_transport;.</p>
<p>
The return value can have one of the following types.</p>
diff --git a/lib/erl_interface/src/connect/ei_resolve.c b/lib/erl_interface/src/connect/ei_resolve.c
index 2545c5f3de..74dcba61a7 100644
--- a/lib/erl_interface/src/connect/ei_resolve.c
+++ b/lib/erl_interface/src/connect/ei_resolve.c
@@ -173,6 +173,8 @@ static int verify_dns_configuration(void)
#endif
+#if defined(VXWORKS) || _REENTRANT
+
/*
* Copy the contents of one struct hostent to another, i.e. don't just
* copy the pointers, copy all the data and create new pointers, etc.
@@ -226,7 +228,7 @@ static int copy_hostent(struct hostent *dest, const struct hostent *src, char *b
while(*(src_aliases)) {
if (buflen < sizeof(*pptr)) return -1;
- *pptr = src_aliases;
+ *pptr = (char *)src_aliases;
advance_buf(buffer,buflen,sizeof(*pptr));
src_aliases++;
pptr++;
@@ -357,6 +359,10 @@ static struct hostent *my_gethostbyname_r(const char *name,
return rval;
}
+#endif /* defined(VXWORKS) || _REENTRANT */
+
+#if defined(VXWORKS) || EI_THREADS != false
+
static struct hostent *my_gethostbyaddr_r(const char *addr,
int length,
int type,
@@ -418,6 +424,7 @@ static struct hostent *my_gethostbyaddr_r(const char *addr,
return rval;
}
+#endif /* defined(VXWORKS) || EI_THREADS != false */
#endif /* !HAVE_GETHOSTBYNAME_R */
diff --git a/lib/erl_interface/src/encode/encode_ulonglong.c b/lib/erl_interface/src/encode/encode_ulonglong.c
index 0f21af2a91..2f136abf96 100644
--- a/lib/erl_interface/src/encode/encode_ulonglong.c
+++ b/lib/erl_interface/src/encode/encode_ulonglong.c
@@ -52,7 +52,7 @@ int ei_encode_ulonglong(char *buf, int *index, EI_ULONGLONG p)
char *s = buf + *index;
char *s0 = s;
- if ((p < 256) && (p >= 0)) {
+ if (p < 256) {
if (!buf) s += 2;
else {
put8(s,ERL_SMALL_INTEGER_EXT);
diff --git a/lib/erl_interface/src/legacy/erl_marshal.c b/lib/erl_interface/src/legacy/erl_marshal.c
index e207b5f0f1..9558dc134b 100644
--- a/lib/erl_interface/src/legacy/erl_marshal.c
+++ b/lib/erl_interface/src/legacy/erl_marshal.c
@@ -290,7 +290,7 @@ int erl_encode_it(ETERM *ep, unsigned char **ext, int dist)
return 0;
}
/* SMALL_INTEGER */
- if ((ul < 256) && (ul >= 0)) {
+ if (ul < 256) {
*(*ext)++ = ERL_SMALL_INTEGER_EXT;
*(*ext)++ = ul & 0xff;
return 0;
diff --git a/lib/eunit/src/Makefile b/lib/eunit/src/Makefile
index e88e28df83..e6dab67363 100644
--- a/lib/eunit/src/Makefile
+++ b/lib/eunit/src/Makefile
@@ -95,7 +95,7 @@ info:
realclean: clean
$(EBIN)/%.$(EMULATOR):%.erl
- erlc -W $(ERL_COMPILE_FLAGS) -o$(EBIN) $<
+ $(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -o$(EBIN) $<
$(OBJECTS): $(PARSE_TRANSFORM_BIN)
diff --git a/lib/ic/c_src/oe_ei_code_erlang_binary.c b/lib/ic/c_src/oe_ei_code_erlang_binary.c
index f790f8bd69..a484dadbe0 100644
--- a/lib/ic/c_src/oe_ei_code_erlang_binary.c
+++ b/lib/ic/c_src/oe_ei_code_erlang_binary.c
@@ -24,7 +24,7 @@ int oe_encode_erlang_binary(CORBA_Environment *ev, erlang_binary *binary) {
int size = ev->_iout;
- (int) ei_encode_binary(0, &size, binary->_buffer, binary->_length);
+ ei_encode_binary(0, &size, binary->_buffer, binary->_length);
if (size >= ev->_outbufsz) {
char *buf = ev->_outbuf;
diff --git a/lib/ic/c_src/oe_ei_encode_atom.c b/lib/ic/c_src/oe_ei_encode_atom.c
index d16df25859..c643cf4fee 100644
--- a/lib/ic/c_src/oe_ei_encode_atom.c
+++ b/lib/ic/c_src/oe_ei_encode_atom.c
@@ -23,7 +23,7 @@
int oe_ei_encode_atom(CORBA_Environment *ev, const char *p) {
int size = ev->_iout;
- (int) ei_encode_atom(0,&size,p);
+ ei_encode_atom(0,&size,p);
if (size >= ev->_outbufsz) {
char *buf = ev->_outbuf;
diff --git a/lib/ic/c_src/oe_ei_encode_port.c b/lib/ic/c_src/oe_ei_encode_port.c
index 981f82c08d..4be1523df1 100644
--- a/lib/ic/c_src/oe_ei_encode_port.c
+++ b/lib/ic/c_src/oe_ei_encode_port.c
@@ -23,7 +23,7 @@
int oe_ei_encode_port(CORBA_Environment *ev, const erlang_port *p) {
int size = ev->_iout;
- (int) ei_encode_port(NULL, &size, p);
+ ei_encode_port(NULL, &size, p);
if (size >= ev->_outbufsz) {
char *buf = ev->_outbuf;
diff --git a/lib/ic/c_src/oe_ei_encode_ref.c b/lib/ic/c_src/oe_ei_encode_ref.c
index d321469b45..71dc5e5a70 100644
--- a/lib/ic/c_src/oe_ei_encode_ref.c
+++ b/lib/ic/c_src/oe_ei_encode_ref.c
@@ -23,7 +23,7 @@
int oe_ei_encode_ref(CORBA_Environment *ev, const erlang_ref *p) {
int size = ev->_iout;
- (int) ei_encode_ref(NULL, &size, p);
+ ei_encode_ref(NULL, &size, p);
if (size >= ev->_outbufsz) {
char *buf = ev->_outbuf;
diff --git a/lib/ic/c_src/oe_ei_encode_string.c b/lib/ic/c_src/oe_ei_encode_string.c
index 48de73b5a8..a52a2e639d 100644
--- a/lib/ic/c_src/oe_ei_encode_string.c
+++ b/lib/ic/c_src/oe_ei_encode_string.c
@@ -23,7 +23,7 @@
int oe_ei_encode_string(CORBA_Environment *ev, const char *p) {
int size = ev->_iout;
- (int) ei_encode_string(0,&size,p);
+ ei_encode_string(0,&size,p);
if (size >= ev->_outbufsz) {
char *buf = ev->_outbuf;
diff --git a/lib/ic/c_src/oe_ei_encode_term.c b/lib/ic/c_src/oe_ei_encode_term.c
index 48de152ac6..b1f1375638 100644
--- a/lib/ic/c_src/oe_ei_encode_term.c
+++ b/lib/ic/c_src/oe_ei_encode_term.c
@@ -23,7 +23,7 @@
int oe_ei_encode_term(CORBA_Environment *ev, void *t) {
int size = ev->_iout;
- (int) ei_encode_term(NULL, &size, t);
+ ei_encode_term(NULL, &size, t);
if (size >= ev->_outbufsz) {
char *buf = ev->_outbuf;
diff --git a/lib/inets/src/ftp/ftp.erl b/lib/inets/src/ftp/ftp.erl
index 86ef9280ad..520db1b457 100644
--- a/lib/inets/src/ftp/ftp.erl
+++ b/lib/inets/src/ftp/ftp.erl
@@ -2068,7 +2068,7 @@ setup_data_connection(#state{mode = active,
{ok, LSock} =
gen_tcp:listen(0, [{ip, IP}, {active, false},
inet6, binary, {packet, 0}]),
- {ok, {_, Port}} = sockname(LSock),
+ {ok, {_, Port}} = sockname({tcp,LSock}),
IpAddress = inet_parse:ntoa(IP),
Cmd = mk_cmd("EPRT |2|~s|~p|", [IpAddress, Port]),
send_ctrl_message(State, Cmd),
@@ -2351,8 +2351,8 @@ millisec_time() ->
peername({tcp, Socket}) -> inet:peername(Socket);
peername({ssl, Socket}) -> ssl:peername(Socket).
-sockname({tcp, Socket}) -> inet:peername(Socket);
-sockname({ssl, Socket}) -> ssl:peername(Socket).
+sockname({tcp, Socket}) -> inet:sockname(Socket);
+sockname({ssl, Socket}) -> ssl:sockname(Socket).
maybe_tls_upgrade(Pid, undefined) ->
{ok, Pid};
diff --git a/lib/runtime_tools/vsn.mk b/lib/runtime_tools/vsn.mk
index 9ee1aba29c..c282661a61 100644
--- a/lib/runtime_tools/vsn.mk
+++ b/lib/runtime_tools/vsn.mk
@@ -1 +1 @@
-RUNTIME_TOOLS_VSN = 1.8.12
+RUNTIME_TOOLS_VSN = 1.8.13
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 5cb1e133d3..2c8e515a14 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -161,6 +161,21 @@ handle_msg({ssh_channel_up, ChannelId, ConnectionHandler},
cm = ConnectionHandler} = State) ->
{ok, State};
+handle_msg({Group, set_unicode_state, _Arg}, State) ->
+ Group ! {self(), set_unicode_state, false},
+ {ok, State};
+
+handle_msg({Group, get_unicode_state}, State) ->
+ Group ! {self(), get_unicode_state, false},
+ {ok, State};
+
+handle_msg({Group, tty_geometry}, #state{group = Group,
+ pty = #ssh_pty{width=Width,
+ height=Height}
+ } = State) ->
+ Group ! {self(),tty_geometry,{Width,Height}},
+ {ok,State};
+
handle_msg({Group, Req}, #state{group = Group, buf = Buf, pty = Pty,
cm = ConnectionHandler,
channel = ChannelId} = State) ->
diff --git a/lib/tools/c_src/erl_memory.c b/lib/tools/c_src/erl_memory.c
index 86e84723b1..c4e126a7b1 100644
--- a/lib/tools/c_src/erl_memory.c
+++ b/lib/tools/c_src/erl_memory.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2003-2012. All Rights Reserved.
+ * Copyright Ericsson AB 2003-2013. All Rights Reserved.
*
* The contents of this file are subject to the Erlang Public License,
* Version 1.1, (the "License"); you may not use this file except in
@@ -30,6 +30,7 @@
# undef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
+typedef int socklen_t;
#else
# if defined(__linux__) && defined(__GNUC__)
# define _GNU_SOURCE 1
@@ -149,11 +150,11 @@ typedef struct {
typedef struct em_buffer_ {
struct em_buffer_ *next;
int write;
- usgnd_int_8 *data;
- usgnd_int_8 *data_end;
- usgnd_int_8 *end;
+ char *data;
+ char *data_end;
+ char *end;
size_t size;
- usgnd_int_8 start[EM_DEFAULT_BUF_SZ];
+ char start[EM_DEFAULT_BUF_SZ];
} em_buffer;
typedef struct {
@@ -173,7 +174,7 @@ typedef struct {
} em_buf_queue;
typedef struct {
- usgnd_int_8 *ptr;
+ char *ptr;
size_t size;
} em_area;
@@ -460,7 +461,7 @@ enqueue(em_state *state, em_buf_queue *queue, size_t min_size)
bsize = min_size;
buf = (em_buffer *) (*state->alloc)(sizeof(em_buffer)
- + (sizeof(usgnd_int_8)
+ + (sizeof(char)
* (bsize-EM_DEFAULT_BUF_SZ)));
if (buf) {
buf->size = bsize;
@@ -595,12 +596,12 @@ get_next_write_area(em_area *area, em_state *state, em_buf_queue *queue,
\* */
static INLINE size_t
-write_str(usgnd_int_8 **dstpp, char *srcp)
+write_str(char **dstpp, char *srcp)
{
size_t i = 0;
if (dstpp)
while (srcp[i])
- *((*dstpp)++) = (usgnd_int_8) srcp[i++];
+ *((*dstpp)++) = srcp[i++];
else
while (srcp[i]) i++;
return i;
@@ -608,7 +609,7 @@ write_str(usgnd_int_8 **dstpp, char *srcp)
static size_t
-write_strings(usgnd_int_8 **ptr,
+write_strings(char **ptr,
char **strings,
char *first_line_prefix,
char *line_prefix,
@@ -640,10 +641,10 @@ write_strings(usgnd_int_8 **ptr,
}
static size_t
-write_title(usgnd_int_8 **bufp, size_t *overflow, size_t width, char *str)
+write_title(char **bufp, size_t *overflow, size_t width, char *str)
{
size_t i, sz, ws;
- usgnd_int_8 *p, *endp;
+ char *p, *endp;
/*
* Writes at least one '|' character at the beginning.
@@ -689,16 +690,16 @@ write_title(usgnd_int_8 **bufp, size_t *overflow, size_t width, char *str)
*(p++) = '|';
while (ws > 1) {
ws--;
- *(p++) = (usgnd_int_8) ' ';
+ *(p++) = ' ';
}
i = 0;
while (str[i] && (overflow || p < endp))
- *(p++) = (usgnd_int_8) str[i++];
+ *(p++) = str[i++];
while (ws) {
ws--;
- *(p++) = (usgnd_int_8) ' ';
+ *(p++) = ' ';
}
ASSERT(overflow || p == endp);
@@ -708,7 +709,7 @@ write_title(usgnd_int_8 **bufp, size_t *overflow, size_t width, char *str)
}
static size_t
-write_obj_sub_titles(em_state *state, usgnd_int_8 **bufp, size_t *overflow)
+write_obj_sub_titles(em_state *state, char **bufp, size_t *overflow)
{
size_t field_width = state->output.field_width;
size_t size = write_title(bufp, overflow, field_width, "size");
@@ -733,12 +734,12 @@ write_obj_sub_titles(em_state *state, usgnd_int_8 **bufp, size_t *overflow)
}
static size_t
-write_header(em_state *state, usgnd_int_8 *ptr, int trunc)
+write_header(em_state *state, char *ptr, int trunc)
{
#define MIN_LTEXT_SZ 18
#define HEADER_EOL_STR "|\n"
- usgnd_int_8 *p;
- usgnd_int_8 **pp;
+ char *p;
+ char **pp;
int i;
size_t overflow;
size_t *ofp;
@@ -855,7 +856,7 @@ write_header(em_state *state, usgnd_int_8 *ptr, int trunc)
}
static INLINE void
-write_mem_info(em_state *state, usgnd_int_8 **p, em_mem_info *mi)
+write_mem_info(em_state *state, char **p, em_mem_info *mi)
{
int fw = state->output.field_width - 1;
*p += sprintf(*p, "%*" USGND_INT_MAX_FSTR " ", fw, mi->size);
@@ -894,7 +895,7 @@ write_mem_info(em_state *state, usgnd_int_8 **p, em_mem_info *mi)
}
static INLINE void
-write_max_ever_mem_info(em_state *state, usgnd_int_8 **p, em_mem_info *mi)
+write_max_ever_mem_info(em_state *state, char **p, em_mem_info *mi)
{
int fw = state->output.field_width - 1;
*p += sprintf(*p, "%*" USGND_INT_MAX_FSTR " ", fw, mi->max_ever_size);
@@ -913,13 +914,13 @@ static void
print_string(em_state *state, char *str)
{
em_area area = {NULL, 0};
- usgnd_int_8 *p;
+ char *p;
/* Get area */
get_next_write_area(&area,state,&state->output.queue,write_str(NULL,str));
- p = (usgnd_int_8 *) area.ptr;
+ p = area.ptr;
area.size = write_str(&p, str);
/* Leave area */
@@ -938,7 +939,7 @@ print_emu_arg(em_state *state)
struct hostent *hp;
struct in_addr iaddr;
usgnd_int_16 port;
- int saddr_size = sizeof(saddr);
+ socklen_t saddr_size = sizeof(saddr);
size_t size;
char *format = "> Emulator command line argument: +Mit %s\n";
@@ -996,7 +997,7 @@ print_emu_arg(em_state *state)
}
static size_t
-write_allocator_info(em_state *state, usgnd_int_8 *ptr)
+write_allocator_info(em_state *state, char *ptr)
{
usgnd_int_32 aix, i, j;
char *header = "> Allocator information:\n";
@@ -1008,8 +1009,8 @@ write_allocator_info(em_state *state, usgnd_int_8 *ptr)
char **strings;
size_t strings_size;
size_t max_line_size = 80;
- usgnd_int_8 *p = ptr;
- usgnd_int_8 **pp = ptr ? &p : NULL;
+ char *p = ptr;
+ char **pp = ptr ? &p : NULL;
strings_size = state->trace_info.max_block_type_ix + 1;
if (strings_size < state->trace_info.max_allocator_ix + 1)
@@ -1140,7 +1141,7 @@ static void
print_main_footer(em_state *state)
{
em_area area = {NULL, 0};
- usgnd_int_8 *p;
+ char *p;
int i;
char *stop_str =
"> Trace stopped\n";
@@ -1248,7 +1249,7 @@ print_main_footer(em_state *state)
static void
print_info(em_state *state, usgnd_int_32 secs, char *extra)
{
- usgnd_int_8 *p;
+ char *p;
int i;
size_t size;
em_area area = {NULL, 0};
@@ -1913,7 +1914,7 @@ error_msg(int res, char *msg)
#if EMEM_d_SWITCH
static size_t
-write_output_filename(usgnd_int_8 *ptr,
+write_output_filename(char *ptr,
char *dirname,
char *nodename,
char *hostname,
@@ -1921,8 +1922,8 @@ write_output_filename(usgnd_int_8 *ptr,
char *pid)
{
size_t sz = 0;
- usgnd_int_8 *p = ptr;
- usgnd_int_8 **pp = ptr ? &p : NULL;
+ char *p = ptr;
+ char **pp = ptr ? &p : NULL;
sz += write_str(pp, dirname);
if (pp) *((*pp)++) = DIR_SEP_CHAR;
sz++;
@@ -2246,7 +2247,7 @@ process_trace(em_state *state)
if (!area.size)
return EM_TRUNCATED_TRACE_ERROR;
res = emtp_parse(state->trace_state,
- &area.ptr, &area.size,
+ (usgnd_int_8 **)&area.ptr, &area.size,
NULL, 0, NULL);
if (res == EMTP_HEADER_PARSED)
break;
@@ -2277,7 +2278,7 @@ process_trace(em_state *state)
while (area.size) {
ops_len = EM_NO_OF_OPS;
res = emtp_parse(state->trace_state,
- &area.ptr, &area.size,
+ (usgnd_int_8 **)&area.ptr, &area.size,
ops, sizeof(emtp_operation), &ops_len);
if (res < 0)
return res;
@@ -2555,7 +2556,7 @@ init_connection(em_state *state)
SOCKET lsock;
SOCKET sock = INVALID_SOCKET;
struct sockaddr_in my_addr;
- int oth_addr_len;
+ socklen_t oth_addr_len;
struct sockaddr_in oth_addr;
#ifdef __WIN32__
WORD wVersionRequested = MAKEWORD(2,0);
@@ -2738,7 +2739,7 @@ output_thread_func(void *arg)
error_msg(EIO, "Output queue");
}
if (fwrite((void *) area.ptr,
- sizeof(usgnd_int_8),
+ sizeof(char),
area.size,
state->output.stream) != area.size) {
disconnect_queue_reader(&state->output.queue);
diff --git a/lib/wx/c_src/Makefile.in b/lib/wx/c_src/Makefile.in
index 1d17076d23..5507a74c14 100644
--- a/lib/wx/c_src/Makefile.in
+++ b/lib/wx/c_src/Makefile.in
@@ -46,6 +46,7 @@ HAVE_OPENGL = true
OPENGL_F = gl_funcs egl_impl
include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/output.mk
include $(ERL_TOP)/make/$(TARGET)/otp_ded.mk
ERL_INCS= $(DED_INCLUDES)
@@ -107,9 +108,9 @@ endif
GL_LIBS = @GL_LIBS@
-CC_O = $(CC) -c $(CFLAGS) $(WX_CFLAGS) $(COMMON_CFLAGS)
+CC_O = $(V_CC) -c $(CFLAGS) $(WX_CFLAGS) $(COMMON_CFLAGS)
OBJC_CC_O = $(OBJC_CC) -c $(CFLAGS) $(OBJC_CFLAGS) $(WX_CFLAGS) $(COMMON_CFLAGS)
-CPP_O = $(CPP) -c $(CXX_FLAGS) $(WX_CXX_FLAGS) $(COMMON_CFLAGS)
+CPP_O = $(V_CPP) -c $(CXX_FLAGS) $(WX_CXX_FLAGS) $(COMMON_CFLAGS)
# Targets
@@ -138,36 +139,36 @@ $(GL_OBJECTS): $(GL_H)
$(WX_OBJECTS): $(GENERATED_H) $(GENERAL_H)
$(SYS_TYPE)/%.o: %.cpp
- mkdir -p $(SYS_TYPE)
+ $(V_at)mkdir -p $(SYS_TYPE)
$(CPP_O) $< -o $@
$(SYS_TYPE)/%.o: %.c
- mkdir -p $(SYS_TYPE)
+ $(V_at)mkdir -p $(SYS_TYPE)
$(CC_O) $< -o $@
$(SYS_TYPE)/wxe_ps_init.o: wxe_ps_init.c
- mkdir -p $(SYS_TYPE)
- $(OBJC_CC_O) $< -o $@
+ $(V_at)mkdir -p $(SYS_TYPE)
+ $(cc_verbose)$(OBJC_CC_O) $< -o $@
$(SYS_TYPE)/%.o: gen/%.cpp
- mkdir -p $(SYS_TYPE)
+ $(V_at)mkdir -p $(SYS_TYPE)
$(CPP_O) $< -o $@
$(SYS_TYPE)/%.o: gen/%.c
- mkdir -p $(SYS_TYPE)
+ $(V_at)mkdir -p $(SYS_TYPE)
$(CC_O) $< -o $@
$(SYS_TYPE)/wxe_win32.$(RC_FILE_EXT): wxe_win32.rc
- mkdir -p $(SYS_TYPE)
+ $(V_at)mkdir -p $(SYS_TYPE)
$(RESCOMP) -o $@ $<
$(TARGET_DIR)/wxe_driver$(SO_EXT): $(WX_OBJECTS)
- mkdir -p $(TARGET_DIR)
- $(LD) $(LDFLAGS) $(WX_OBJECTS) $(WX_LIBS) -o $@
+ $(V_at)mkdir -p $(TARGET_DIR)
+ $(V_LD) $(LDFLAGS) $(WX_OBJECTS) $(WX_LIBS) -o $@
$(TARGET_DIR)/erl_gl$(SO_EXT): $(GL_OBJECTS)
- mkdir -p $(TARGET_DIR)
- $(CC) $(LDFLAGS) $(GL_OBJECTS) $(GL_LIBS) -o $@
+ $(V_at)mkdir -p $(TARGET_DIR)
+ $(V_CC) $(LDFLAGS) $(GL_OBJECTS) $(GL_LIBS) -o $@
# ----------------------------------------------------
diff --git a/make/output.mk.in b/make/output.mk.in
index 938f878ebe..51d9401280 100644
--- a/make/output.mk.in
+++ b/make/output.mk.in
@@ -67,6 +67,7 @@ V_CC = $(cc_verbose)$(CC)
cpp_verbose_0 = @echo " CPP "$@;
cpp_verbose = $(cpp_verbose_$(V))
+V_CPP = $(cpp_verbose)$(CPP)
# For the diameter compiler.
dia_verbose_0 = @echo " DIA "$@;