aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorHans Bolinder <[email protected]>2017-05-02 12:32:39 +0200
committerHans Bolinder <[email protected]>2017-05-02 12:32:39 +0200
commit37decbb64953cd65bde2f7003ef5057dc0615ff1 (patch)
tree688444cfd1f1d4447c4216ebdaee2b838915931e /erts
parent22e7443d9df041185944a7d49b30459ba4609849 (diff)
parent0298a195873c606ac885d37f54a098eca3d7905a (diff)
downloadotp-37decbb64953cd65bde2f7003ef5057dc0615ff1.tar.gz
otp-37decbb64953cd65bde2f7003ef5057dc0615ff1.tar.bz2
otp-37decbb64953cd65bde2f7003ef5057dc0615ff1.zip
Merge branch 'maint-19' into maint
* maint-19: Updated OTP version Prepare release inets: Add missing release note dialyzer: Fix a bug regarding unknown types erl_mseg.c: don't use invalid indices in - > cache_powered_node[] Fix release note for OTP-14290
Diffstat (limited to 'erts')
-rw-r--r--erts/doc/src/notes.xml41
-rw-r--r--erts/emulator/sys/common/erl_mseg.c7
-rw-r--r--erts/vsn.mk2
3 files changed, 38 insertions, 12 deletions
diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml
index 5d21b8fda4..11206d43e7 100644
--- a/erts/doc/src/notes.xml
+++ b/erts/doc/src/notes.xml
@@ -32,40 +32,52 @@
<p>This document describes the changes made to the ERTS application.</p>
-<section><title>Erts 8.3.2</title>
+<section><title>Erts 8.3.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
- The <c>+Bi</c> command line argument of <c>erl</c>
- erroneously caused <c>SIGTERM</c> to be ignored by the VM
- as well as of all its child processes. This bug was
- introduced in erts version 8.3.</p>
+ Fixed memory segment cache used for multiblock carriers.
+ Huge (> 2GB) memory segments could cause a VM crash.
+ Creation of such huge memory segments used for multiblock
+ carriers is however very uncommon.</p>
<p>
- Own Id: OTP-14358 Aux Id: OTP-14085 </p>
+ Own Id: OTP-14360 Aux Id: ERL-401, PR-1417 </p>
+ </item>
+ <item>
+ <p>
+ Fix release note for OTP-14290 in ERTS version 8.3.1. It
+ was erroneously placed under "Known Bugs and Problems".</p>
+ <p>
+ Own Id: OTP-14363 Aux Id: OTP-14290 </p>
</item>
</list>
</section>
</section>
-<section><title>Erts 8.3.1</title>
+<section><title>Erts 8.3.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
- Trying to open a directory with file:read_file/1 on Unix
- leaked a file descriptor. This bug has now been fixed.</p>
+ The <c>+Bi</c> command line argument of <c>erl</c>
+ erroneously caused <c>SIGTERM</c> to be ignored by the VM
+ as well as of all its child processes. This bug was
+ introduced in erts version 8.3.</p>
<p>
- Own Id: OTP-14308 Aux Id: ERL-383 </p>
+ Own Id: OTP-14358 Aux Id: OTP-14085 </p>
</item>
</list>
</section>
+</section>
- <section><title>Known Bugs and Problems</title>
+<section><title>Erts 8.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
@@ -76,6 +88,13 @@
<p>
Own Id: OTP-14290</p>
</item>
+ <item>
+ <p>
+ Trying to open a directory with file:read_file/1 on Unix
+ leaked a file descriptor. This bug has now been fixed.</p>
+ <p>
+ Own Id: OTP-14308 Aux Id: ERL-383 </p>
+ </item>
</list>
</section>
diff --git a/erts/emulator/sys/common/erl_mseg.c b/erts/emulator/sys/common/erl_mseg.c
index 882c93a83c..968f71211c 100644
--- a/erts/emulator/sys/common/erl_mseg.c
+++ b/erts/emulator/sys/common/erl_mseg.c
@@ -87,6 +87,7 @@ static const int debruijn[32] = {
#define CACHE_AREAS (32 - MSEG_ALIGN_BITS)
+/* FIXME: segment sizes > 2 GB result in bogus negative indices */
#define SIZE_TO_CACHE_AREA_IDX(S) (LOG2((S)) - MSEG_ALIGN_BITS)
#define MAX_CACHE_SIZE (30)
@@ -396,6 +397,9 @@ static ERTS_INLINE int cache_bless_segment(ErtsMsegAllctr_t *ma, void *seg, UWor
if (MSEG_FLG_IS_2POW(flags)) {
int ix = SIZE_TO_CACHE_AREA_IDX(size);
+ if (ix < 0)
+ return 0;
+
ASSERT(ix < CACHE_AREAS);
ASSERT((1 << (ix + MSEG_ALIGN_BITS)) == size);
@@ -471,6 +475,9 @@ static ERTS_INLINE void *cache_get_segment(ErtsMsegAllctr_t *ma, UWord *size_p,
ASSERT(IS_2POW(size));
+ if (ix < 0)
+ return NULL;
+
for( i = ix; i < CACHE_AREAS; i++) {
if (erts_circleq_is_empty(&(ma->cache_powered_node[i])))
diff --git a/erts/vsn.mk b/erts/vsn.mk
index 29323dd970..a83c1ab761 100644
--- a/erts/vsn.mk
+++ b/erts/vsn.mk
@@ -18,7 +18,7 @@
# %CopyrightEnd%
#
-VSN = 8.3.2
+VSN = 8.3.3
# Port number 4365 in 4.2
# Port number 4366 in 4.3