this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Remove registered name when process is destroyed

garrison f7c2ed6c 2d1c8097

+27 -5
+15
lib/trinity/scheduler.ex
··· 50 50 @type t :: %__MODULE__{ 51 51 trap_exit: boolean, 52 52 links: [pid], 53 + name_node: atom | nil, 53 54 } 54 55 defstruct [ 55 56 trap_exit: false, 56 57 links: [], 58 + name_node: nil, 57 59 ] 58 60 end 59 61 ··· 461 463 proc_links: proc_links, 462 464 proc_queue_keys: proc_queue_keys, 463 465 proc_nodes: proc_nodes, 466 + proc_aliases: proc_aliases, 464 467 node_procs: node_procs, 465 468 } = sim 469 + 470 + # Remove registered name for process 471 + case :ets.lookup(proc_links, pid) do 472 + [{_key, %ProcInfo{name_node: name_node}}] -> 473 + case name_node do 474 + {_name, _node} = key -> 475 + :ets.delete(proc_aliases, key) 476 + nil -> :noop 477 + end 478 + 479 + [] -> :noop 480 + end 466 481 467 482 destroy_links(proc_links, pid) 468 483 destroy_proc_node(proc_nodes, node_procs, pid)
+12 -5
lib/trinity/sim_process.ex
··· 183 183 end 184 184 185 185 defp sim_register(pid, name) do 186 - %{proc_aliases: proc_aliases} = get_sim() 186 + %{proc_links: proc_links, proc_aliases: proc_aliases} = get_sim() 187 187 node = get_proc_node() 188 188 189 + info = 190 + case :ets.lookup(proc_links, pid) do 191 + [] -> %ProcInfo{} 192 + [{_key, %ProcInfo{} = info}] -> info 193 + end 194 + 189 195 key = {name, node} 190 - case :ets.lookup(proc_aliases, key) do 191 - [] -> :ets.insert(proc_aliases, {key, pid}) 192 - [{_key, _pid}] -> raise ArgumentError, "Could not register #{inspect(pid)} with name #{inspect(name)}" 193 - end 196 + if info.name_node != nil, do: raise(ArgumentError, "Process #{inspect(pid)} already has a name: #{inspect(info.name_node)}") 197 + if :ets.member(proc_aliases, key), do: raise(ArgumentError, "Name #{inspect(name)} is already registered on node #{inspect(node)}") 198 + 199 + :ets.insert(proc_aliases, {key, pid}) 200 + :ets.insert(proc_links, {pid, %{info | name_node: key}}) 194 201 195 202 true 196 203 end