diff options
author | Siri Hansen <[email protected]> | 2018-06-13 13:55:42 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2018-06-13 13:55:42 +0200 |
commit | d0252a3cef9330eb0d8cc252cce79f6f8df26e03 (patch) | |
tree | a7f75ae939076a1e54213b3db883fd3478097548 /lib | |
parent | e754f23ead59f8592f3a1cbb66e22cfdba73517d (diff) | |
parent | b0900fc2f7daab1c77dd8878c39ab24591bb076b (diff) | |
download | otp-d0252a3cef9330eb0d8cc252cce79f6f8df26e03.tar.gz otp-d0252a3cef9330eb0d8cc252cce79f6f8df26e03.tar.bz2 otp-d0252a3cef9330eb0d8cc252cce79f6f8df26e03.zip |
Merge pull request #1771 from fxn/master
Explain why the AM becomes group leader
Diffstat (limited to 'lib')
-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. |