diff options
| author | Xavier Noria <[email protected]> | 2018-04-05 01:40:20 +0200 | 
|---|---|---|
| committer | Xavier Noria <[email protected]> | 2018-06-13 12:04:08 +0200 | 
| commit | b0900fc2f7daab1c77dd8878c39ab24591bb076b (patch) | |
| tree | a7f75ae939076a1e54213b3db883fd3478097548 /lib/kernel | |
| parent | e754f23ead59f8592f3a1cbb66e22cfdba73517d (diff) | |
| download | otp-b0900fc2f7daab1c77dd8878c39ab24591bb076b.tar.gz otp-b0900fc2f7daab1c77dd8878c39ab24591bb076b.tar.bz2 otp-b0900fc2f7daab1c77dd8878c39ab24591bb076b.zip  | |
Explain why the AM becomes group leader
Diffstat (limited to 'lib/kernel')
| -rw-r--r-- | lib/kernel/doc/src/application.xml | 10 | ||||
| -rw-r--r-- | lib/kernel/src/application_master.erl | 4 | 
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/kernel/doc/src/application.xml b/lib/kernel/doc/src/application.xml index 886286b76d..be914aee87 100644 --- a/lib/kernel/doc/src/application.xml +++ b/lib/kernel/doc/src/application.xml @@ -318,8 +318,13 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>            <c>{error,{not_started,App}}</c> is returned, where <c>App</c>            is the name of the missing application.</p>          <p>The application controller then creates an <em>application master</em> -	  for the application. The application master is -          the group leader of all the processes in the application. +          for the application. The application master becomes the +          group leader of all the processes in the application. I/O is +          forwarded to the previous group leader, though, this is just +          a way to identify processes that belong to the application. +          Used for example to find itself from any process, or, +          reciprocally, to kill them all when it terminates.</p> +        <p>            The application master starts the application by calling            the application callback function <c>Module:start/2</c> as            defined by the application specification key <c>mod</c>.</p> @@ -608,4 +613,3 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>        <seealso marker="app">app(4)</seealso></p>    </section>  </erlref> - diff --git a/lib/kernel/src/application_master.erl b/lib/kernel/src/application_master.erl index 5da2b0b06c..06991b45e1 100644 --- a/lib/kernel/src/application_master.erl +++ b/lib/kernel/src/application_master.erl @@ -118,6 +118,10 @@ init(Parent, Starter, ApplData, Type) ->      link(Parent),      process_flag(trap_exit, true),      OldGleader = group_leader(), +    %% We become the group leader, but forward all I/O to OldGleader. +    %% This is just a way to identify processes that belong to the +    %% application. Used for example to find ourselves from any +    %% process, or, reciprocally, to kill them all when we terminate.      group_leader(self(), self()),      %% Insert ourselves as master for the process.  This ensures that      %% the processes in the application can use get_env/1 at startup.  | 
