Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions lib/elixir/lib/process.ex
Original file line number Diff line number Diff line change
Expand Up @@ -979,6 +979,30 @@ defmodule Process do
@spec unalias(alias) :: boolean
defdelegate unalias(alias), to: :erlang

@doc """
Returns the label set for the process `pid` as set with `set_label/1`
or `:proc_lib.set_label/1`.

Defaults to the current process when `pid` is not passed.

## Examples

Process.set_label({:any, "term"})
Process.get_label()
#=> {:any, "term"}

Returns `nil` when not set:

Process.get_label(pid)
#=> nil

"""
@doc since: "1.20.0"
@spec get_label(pid()) :: term()
def get_label(pid \\ self()) do
nilify(:proc_lib.get_label(pid))
end

@doc """
Add a descriptive term to the current process.

Expand Down
17 changes: 15 additions & 2 deletions lib/elixir/test/elixir/process_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,22 @@ defmodule ProcessTest do
end
end

describe "set_label/1" do
@compile {:no_warn_undefined, :proc_lib}
describe "get_label/1" do
test "gets a process label, compatible with `:proc_lib.set_label/1`" do
label = {:some_label, :rand.uniform(99999)}
assert :ok = :proc_lib.set_label(label)

assert Process.get_label() == label
assert Process.get_label(self()) == label
end

test "returns nil when not set" do
pid = spawn(fn -> :ok end)
assert Process.get_label(pid) == nil
end
end

describe "set_label/1" do
test "sets a process label, compatible with `:proc_lib.get_label/1`" do
label = {:some_label, :rand.uniform(99999)}
assert :ok = Process.set_label(label)
Expand Down
Loading