diff options
| -rw-r--r-- | erts/doc/src/notes.xml | 17 | ||||
| -rw-r--r-- | erts/emulator/beam/erl_gc.c | 51 | ||||
| -rw-r--r-- | erts/vsn.mk | 2 | ||||
| -rw-r--r-- | otp_versions.table | 1 | 
4 files changed, 40 insertions, 31 deletions
| diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml index 2a36e5568c..323df38ed3 100644 --- a/erts/doc/src/notes.xml +++ b/erts/doc/src/notes.xml @@ -32,6 +32,23 @@    <p>This document describes the changes made to the ERTS application.</p> +<section><title>Erts 8.0.4</title> + +    <section><title>Fixed Bugs and Malfunctions</title> +      <list> +        <item> +          <p> +	    Fixed a VM crash that occured in garbage collection of a +	    process when it had received maps over the distribution. +	    This bug was introduced in ERTS version 8.0 (OTP 19.0).</p> +          <p> +	    Own Id: OTP-13889</p> +        </item> +      </list> +    </section> + +</section> +  <section><title>Erts 8.0.3</title>      <section><title>Fixed Bugs and Malfunctions</title> diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c index 830a06fb20..904bbda759 100644 --- a/erts/emulator/beam/erl_gc.c +++ b/erts/emulator/beam/erl_gc.c @@ -535,9 +535,19 @@ young_gen_usage(Process *p)      if (p->flags & F_ON_HEAP_MSGQ) {  	ErtsMessage *mp; -	for (mp = p->msg.first; mp; mp = mp->next) +	for (mp = p->msg.first; mp; mp = mp->next) { +	    /* +	     * We leave not yet decoded distribution messages +	     * as they are in the queue since it is not +	     * possible to determine a maximum size until +	     * actual decoding. However, we use their estimated +	     * size when calculating need, and by this making +	     * it more likely that they will fit on the heap +	     * when actually decoded. +	     */  	    if (mp->data.attached)  		hsz += erts_msg_attached_data_size(mp); +	}      }      aheap = p->abandoned_heap; @@ -2250,39 +2260,22 @@ move_msgq_to_heap(Process *p)  	if (mp->data.attached) {  	    ErlHeapFragment *bp; -	    ErtsHeapFactory factory; - -	    erts_factory_proc_prealloc_init(&factory, p, -					    erts_msg_attached_data_size(mp)); - -	    if (is_non_value(ERL_MESSAGE_TERM(mp))) { -		if (mp->data.dist_ext) { -		    ASSERT(mp->data.dist_ext->heap_size >= 0); -		    if (is_not_nil(ERL_MESSAGE_TOKEN(mp))) { -			bp = erts_dist_ext_trailer(mp->data.dist_ext); -                        /* Tokens does not use literal optimization */ -			ERL_MESSAGE_TOKEN(mp) = copy_struct(ERL_MESSAGE_TOKEN(mp), -							    bp->used_size, -                                                            &factory.hp, -                                                            factory.off_heap); - -			erts_cleanup_offheap(&bp->off_heap); -		    } -		    ERL_MESSAGE_TERM(mp) = erts_decode_dist_ext(&factory, -								mp->data.dist_ext); -		    erts_free_dist_ext_copy(mp->data.dist_ext); -		    mp->data.dist_ext = NULL; -		} -	    } -	    else { + +	    /* +	     * We leave not yet decoded distribution messages +	     * as they are in the queue since it is not +	     * possible to determine a maximum size until +	     * actual decoding... +	     */ +	    if (is_value(ERL_MESSAGE_TERM(mp))) {                  bp = erts_message_to_heap_frag(mp);  		if (bp->next) -		    erts_move_multi_frags(&factory.hp, factory.off_heap, bp, +		    erts_move_multi_frags(&p->htop, &p->off_heap, bp,  					  mp->m, ERL_MESSAGE_REF_ARRAY_SZ, 0);  		else -		    copy_one_frag(&factory.hp, factory.off_heap, bp, +		    copy_one_frag(&p->htop, &p->off_heap, bp,  				  mp->m, ERL_MESSAGE_REF_ARRAY_SZ);  		if (mp->data.attached != ERTS_MSG_COMBINED_HFRAG) { @@ -2299,8 +2292,6 @@ move_msgq_to_heap(Process *p)  		    mp = new_mp;  		}  	    } - -	    erts_factory_close(&factory);  	}  	mpp = &(*mpp)->next; diff --git a/erts/vsn.mk b/erts/vsn.mk index acd4509304..d9c441e887 100644 --- a/erts/vsn.mk +++ b/erts/vsn.mk @@ -18,7 +18,7 @@  # %CopyrightEnd%  #  -VSN = 8.0.3 +VSN = 8.0.4  # Port number 4365 in 4.2  # Port number 4366 in 4.3 diff --git a/otp_versions.table b/otp_versions.table index 9d7d0a78bb..1352b5c041 100644 --- a/otp_versions.table +++ b/otp_versions.table @@ -1,3 +1,4 @@ +OTP-19.0.6 : erts-8.0.4 # asn1-4.0.3 common_test-1.12.2 compiler-7.0.1 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3.2 jinterface-1.7 kernel-5.0.2 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 ssl-8.0.1 stdlib-3.0.1 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 :  OTP-19.0.5 : kernel-5.0.2 # asn1-4.0.3 common_test-1.12.2 compiler-7.0.1 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 erts-8.0.3 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3.2 jinterface-1.7 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 ssl-8.0.1 stdlib-3.0.1 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 :  OTP-19.0.4 : erts-8.0.3 # asn1-4.0.3 common_test-1.12.2 compiler-7.0.1 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3.2 jinterface-1.7 kernel-5.0.1 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 ssl-8.0.1 stdlib-3.0.1 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 :  OTP-19.0.3 : inets-6.3.2 kernel-5.0.1 ssl-8.0.1 # asn1-4.0.3 common_test-1.12.2 compiler-7.0.1 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 erts-8.0.2 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 jinterface-1.7 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 stdlib-3.0.1 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 : | 
