Skip to content

Commit f47edc9

Browse files
committed
Delete locks in before send callback
1 parent 9cf908e commit f47edc9

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

lib/extensions/persistent_session/plug/cookie.ex

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,18 @@ defmodule PowPersistentSession.Plug.Cookie do
229229
defp filter_invalid!(clauses), do: raise "Invalid get_by clauses stored: #{inspect clauses}"
230230

231231
defp lock_auth_user(conn, token, user, metadata, config) do
232+
id = {[__MODULE__, token], self()}
232233
nodes = Node.list() ++ [node()]
233234

234-
case :global.set_lock({[__MODULE__, token], self()}, nodes, 0) do
235+
case :global.set_lock(id, nodes, 0) do
235236
true ->
236-
auth_user(conn, user, metadata, config)
237+
conn
238+
|> register_before_send(fn conn ->
239+
:global.del_lock(id, nodes)
240+
241+
conn
242+
end)
243+
|> auth_user(user, metadata, config)
237244

238245
false ->
239246
Plug.assign_current_user(conn, user, config)

lib/pow/plug/session.ex

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,19 @@ defmodule Pow.Plug.Session do
246246
end
247247

248248
defp lock_create(conn, session_id, user, config) do
249+
id = {[__MODULE__, session_id], self()}
249250
nodes = Node.list() ++ [node()]
250251

251-
case :global.set_lock({[__MODULE__, session_id], self()}, nodes, 0) do
252-
true -> create(conn, user, config)
252+
case :global.set_lock(id, nodes, 0) do
253+
true ->
254+
conn
255+
|> register_before_send(fn conn ->
256+
:global.del_lock(id, nodes)
257+
258+
conn
259+
end)
260+
|> create(user, config)
261+
253262
false -> {conn, user}
254263
end
255264
end

0 commit comments

Comments
 (0)