Fred T-H avatar Fred T-H committed 3b7b4f6

fixing a bug in the termination order of user processes

Comments (0)

Files changed (1)

src/chut_user.erl

 %%--------------------------------------------------------------------
 %% Function: terminate(UserId, Reason) -> true
 %% Description: kills the supervisor which should trickle down to the
-%% children.
+%% children. The commands to remove the supervisor are ran within an
+%% independent process. This is necessary because otherwise,
+%% terminating the user will keep it from deleting its own child spec
+%% from the chut supervisor.
 %%--------------------------------------------------------------------
 terminate(UserId) ->
-    supervisor:terminate_child(chut_user_supersup, UserId),
-    supervisor:delete_child(chut_user_supersup, UserId).
+    proc_lib:spawn(fun() ->
+        supervisor:terminate_child(chut_user_supersup, UserId),
+        supervisor:delete_child(chut_user_supersup, UserId)
+    end).
 
 %%--------------------------------------------------------------------
 %% Function: subscribe(UserId) -> {ok, HandlerId}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.