From 4cf032b0124d82c61f9023666ec894de80cb8f57 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Tue, 10 Mar 2026 18:47:08 +0900 Subject: [PATCH 1/2] Add Process.get_label/1 --- lib/elixir/lib/process.ex | 24 ++++++++++++++++++++++++ lib/elixir/test/elixir/process_test.exs | 17 +++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/elixir/lib/process.ex b/lib/elixir/lib/process.ex index e71b1b1f5f8..3659e73caf1 100644 --- a/lib/elixir/lib/process.ex +++ b/lib/elixir/lib/process.ex @@ -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 `Process.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. diff --git a/lib/elixir/test/elixir/process_test.exs b/lib/elixir/test/elixir/process_test.exs index 8b4813fcb3c..db60db627f0 100644 --- a/lib/elixir/test/elixir/process_test.exs +++ b/lib/elixir/test/elixir/process_test.exs @@ -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) From 0d23cdc222d35f57fbed500883e19c178b1c094c Mon Sep 17 00:00:00 2001 From: Jean Klingler Date: Tue, 10 Mar 2026 19:00:59 +0900 Subject: [PATCH 2/2] Use non-qualified function name Co-authored-by: Andrea Leopardi --- lib/elixir/lib/process.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/elixir/lib/process.ex b/lib/elixir/lib/process.ex index 3659e73caf1..17e7149f2bc 100644 --- a/lib/elixir/lib/process.ex +++ b/lib/elixir/lib/process.ex @@ -980,7 +980,7 @@ defmodule Process do defdelegate unalias(alias), to: :erlang @doc """ - Returns the label set for the process `pid` as set with `Process.set_label/1` + 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.