From aaff5f36b836c65a72fb38a27e31a88d199a3155 Mon Sep 17 00:00:00 2001
From: Anders Svensson <anders@erlang.org>
Date: Wed, 25 Mar 2015 06:27:05 +0100
Subject: Add guard to reject {spawn_opt, false} as transport/service_opt()

It was possible to configure the option, but doing so caused the service
to fail when starting a watchdog process:

   {function_clause,
       [{diameter_service,'-spawn_opts/1-lc$^0/1-0-',
            [false],
            [{file,"base/diameter_service.erl"},{line,846}]},
        {diameter_service,start,5,
            [{file,"base/diameter_service.erl"},{line,820}]},
        {diameter_service,start,3,
            [{file,"base/diameter_service.erl"},{line,782}]},
        {diameter_service,handle_call,3,
            [{file,"base/diameter_service.erl"},{line,385}]},
        {gen_server,try_handle_call,4,[{file,"gen_server.erl"},{line,607}]},
        {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,639}]},
        {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,237}]}]}

Tests for the option in the config suite were also missing.

Bungled in commit 78b3dc6.
---
 lib/diameter/src/base/diameter_config.erl   | 6 +++++-
 lib/diameter/test/diameter_config_SUITE.erl | 6 ++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

(limited to 'lib/diameter')

diff --git a/lib/diameter/src/base/diameter_config.erl b/lib/diameter/src/base/diameter_config.erl
index 0d0304bf33..edfb91dbf4 100644
--- a/lib/diameter/src/base/diameter_config.erl
+++ b/lib/diameter/src/base/diameter_config.erl
@@ -675,7 +675,11 @@ opt(spawn_opt, L)
     L;
 
 opt(K, false = B)
-  when K /= sequence ->
+  when K == share_peers;
+       K == use_shared_peers;
+       K == monitor;
+       K == restrict_connections;
+       K == string_decode ->
     B;
 
 opt(K, true = B)
diff --git a/lib/diameter/test/diameter_config_SUITE.erl b/lib/diameter/test/diameter_config_SUITE.erl
index 77f7aace1b..ea77aa3716 100644
--- a/lib/diameter/test/diameter_config_SUITE.erl
+++ b/lib/diameter/test/diameter_config_SUITE.erl
@@ -85,6 +85,9 @@
          {string_decode,
           [[true], [false]],
           [[0], [x]]},
+         {spawn_opt,
+          [[[]], [[monitor, link]]],
+          [[false]]},
          {invalid_option,  %% invalid service options are rejected
           [],
           [[x],
@@ -186,6 +189,9 @@
          {private,
           [[x]],
           []},
+         {spawn_opt,
+          [[[]], [[monitor, link]]],
+          [[false]]},
          {invalid_option,  %% invalid transport options are silently ignored
           [[x],
            [x,x]],
-- 
cgit v1.2.3