Skip to content

Commit

Permalink
Use pattern matching to know if the finalizer needs data or not
Browse files Browse the repository at this point in the history
  • Loading branch information
meh committed Apr 24, 2013
1 parent a8efe2e commit 2d77e8b
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 9 deletions.
2 changes: 1 addition & 1 deletion lib/finalizer.ex
Expand Up @@ -11,7 +11,7 @@ defmodule Finalizer do
manager = Process.whereis(Finalizer.Manager)
id = :gen_server.call(manager, { :register, fun })

:resource.notify_when_destroyed(manager, { :finalize, id, nil })
:resource.notify_when_destroyed(manager, { :finalize, id })
end

def define(pid) when is_pid pid do
Expand Down
14 changes: 6 additions & 8 deletions lib/finalizer/manager.ex
Expand Up @@ -34,16 +34,14 @@ defmodule Finalizer.Manager do
{ :reply, id, [ id: id, finalizers: Dict.put(state[:finalizers], id, fun) ] }
end

def handle_info({ :finalize, id, data }, state) do
finalizer = Dict.get(state[:finalizers], id)
def handle_info({ :finalize, id }, state) do
Dict.get!(state[:finalizers], id).()

cond do
is_function finalizer, 0 ->
finalizer.()
{ :noreply, [ id: state[:id], finalizers: Dict.delete(state[:finalizers], id) ] }
end

is_function finalizer, 1 ->
finalizer.(data)
end
def handle_info({ :finalize, id, data }, state) do
Dict.get!(state[:finalizers], id).(data)

{ :noreply, [ id: state[:id], finalizers: Dict.delete(state[:finalizers], id) ] }
end
Expand Down

0 comments on commit 2d77e8b

Please sign in to comment.