From 36e4e948af8c7478dbaf5b2bdd85794f09275d3f Mon Sep 17 00:00:00 2001
From: Anders Svensson
Date: Thu, 5 Oct 2017 12:49:52 +0200
Subject: Fix missing monitor in diameter_reg
Commit fae8ca0c inadvertently removed the monitor at add/1 and
add_new/1. As a result, process death did not remove associations,
causing table diameter_reg to leak entries and stop/start of a service
to fail.
Add a testcase to detect the problem, which existing testcases miss.
---
lib/diameter/src/base/diameter_reg.erl | 6 +++++-
lib/diameter/test/diameter_reg_SUITE.erl | 11 ++++++++++-
2 files changed, 15 insertions(+), 2 deletions(-)
(limited to 'lib/diameter')
diff --git a/lib/diameter/src/base/diameter_reg.erl b/lib/diameter/src/base/diameter_reg.erl
index bd5db54a5c..e0c41a2834 100644
--- a/lib/diameter/src/base/diameter_reg.erl
+++ b/lib/diameter/src/base/diameter_reg.erl
@@ -238,7 +238,11 @@ handle_call({add, Uniq, Key}, {Pid, _}, S) ->
Rec = {Key, Pid},
NS = flush(Uniq, Rec, S), %% before insert
{Res, New} = insert(Uniq, Rec),
- {reply, Res, notify(add, New andalso Rec, NS)};
+ {reply, Res, notify(add, New andalso Rec, if New ->
+ add_monitor(Pid, NS);
+ true ->
+ NS
+ end)};
handle_call({remove, Key}, {Pid, _}, S) ->
Rec = {Key, Pid},
diff --git a/lib/diameter/test/diameter_reg_SUITE.erl b/lib/diameter/test/diameter_reg_SUITE.erl
index e2a1ca00c3..cd9242faa8 100644
--- a/lib/diameter/test/diameter_reg_SUITE.erl
+++ b/lib/diameter/test/diameter_reg_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2017. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@
-export([add/1,
add_new/1,
remove/1,
+ down/1,
terms/1,
pids/1]).
@@ -56,6 +57,7 @@ tc() ->
[add,
add_new,
remove,
+ down,
terms,
pids].
@@ -88,6 +90,13 @@ remove(_) ->
[{Ref, Pid}] = ?reg:match(Ref),
Pid = self().
+down(_) ->
+ Ref = make_ref(),
+ {_, MRef} = spawn_monitor(fun() -> ?reg:add_new(Ref), timer:sleep(1000) end),
+ receive {'DOWN', MRef, process, _, _} -> ok end,
+ timer:sleep(1000),
+ [] = ?reg:match(Ref).
+
terms(_) ->
Ref = make_ref(),
true = ?reg:add_new(Ref),
--
cgit v1.2.3
From f348a4461d5c3b5e887eeb550117f08508adf2d6 Mon Sep 17 00:00:00 2001
From: Anders Svensson
Date: Thu, 5 Oct 2017 14:16:14 +0200
Subject: Update appup and code_change for ERIERL-83
---
lib/diameter/src/base/diameter_reg.erl | 5 +++++
lib/diameter/src/diameter.appup.src | 6 ++++--
2 files changed, 9 insertions(+), 2 deletions(-)
(limited to 'lib/diameter')
diff --git a/lib/diameter/src/base/diameter_reg.erl b/lib/diameter/src/base/diameter_reg.erl
index e0c41a2834..5b7cfab31a 100644
--- a/lib/diameter/src/base/diameter_reg.erl
+++ b/lib/diameter/src/base/diameter_reg.erl
@@ -298,6 +298,11 @@ terminate(_Reason, _State)->
%% # code_change/3
%% ----------------------------------------------------------
+code_change(_, State, "2.1") ->
+ {ok, lists:foldl(fun add_monitor/2,
+ State,
+ ets:select(?TABLE, [{{'_', '$1'}, [], ['$1']}]))};
+
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
diff --git a/lib/diameter/src/diameter.appup.src b/lib/diameter/src/diameter.appup.src
index 7566cf25c3..c2198de9ea 100644
--- a/lib/diameter/src/diameter.appup.src
+++ b/lib/diameter/src/diameter.appup.src
@@ -53,7 +53,8 @@
{"1.12", [{restart_application, diameter}]}, %% 19.0
{"1.12.1", [{restart_application, diameter}]}, %% 19.1
{"1.12.2", [{restart_application, diameter}]}, %% 19.3
- {"2.0", [{restart_application, diameter}]} %% 20.0
+ {"2.0", [{restart_application, diameter}]}, %% 20.0
+ {"2.1", [{update, diameter_reg, {advanced, "2.1"}}]} %% 20.1
],
[
{"0.9", [{restart_application, diameter}]},
@@ -88,6 +89,7 @@
{"1.12", [{restart_application, diameter}]},
{"1.12.1", [{restart_application, diameter}]},
{"1.12.2", [{restart_application, diameter}]},
- {"2.0", [{restart_application, diameter}]}
+ {"2.0", [{restart_application, diameter}]},
+ {"2.1", [{restart_application, diameter}]}
]
}.
--
cgit v1.2.3
From 0330a700879b3ada5a288e62d008b78cb7603fbe Mon Sep 17 00:00:00 2001
From: Anders Svensson
Date: Thu, 5 Oct 2017 14:40:09 +0200
Subject: vsn -> 2.1.1
---
lib/diameter/vsn.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'lib/diameter')
diff --git a/lib/diameter/vsn.mk b/lib/diameter/vsn.mk
index e6dfddb5b2..f73f68da0b 100644
--- a/lib/diameter/vsn.mk
+++ b/lib/diameter/vsn.mk
@@ -17,5 +17,5 @@
# %CopyrightEnd%
APPLICATION = diameter
-DIAMETER_VSN = 2.1
+DIAMETER_VSN = 2.1.1
APP_VSN = $(APPLICATION)-$(DIAMETER_VSN)$(PRE_VSN)
--
cgit v1.2.3
From f4081916133844a7a9241a600b285c750570321c Mon Sep 17 00:00:00 2001
From: Erlang/OTP
Date: Mon, 9 Oct 2017 15:00:24 +0200
Subject: Update release notes
---
lib/diameter/doc/src/notes.xml | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
(limited to 'lib/diameter')
diff --git a/lib/diameter/doc/src/notes.xml b/lib/diameter/doc/src/notes.xml
index d1ad00de5c..589e7d5145 100644
--- a/lib/diameter/doc/src/notes.xml
+++ b/lib/diameter/doc/src/notes.xml
@@ -43,6 +43,23 @@ first.
+diameter 2.1.1
+
+ Fixed Bugs and Malfunctions
+
+ -
+
+ An inadvertently removed monitor in diameter 2.1 caused
+ the ets table diameter_reg to leak entries, and caused
+ service restart and more to fail.
+
+ Own Id: OTP-14668 Aux Id: ERIERL-83
+
+
+
+
+
+
diameter 2.1
Fixed Bugs and Malfunctions
--
cgit v1.2.3