Current section

Files

Jump to
membrane_core lib membrane core process_helper.ex
Raw

lib/membrane/core/process_helper.ex

defmodule Membrane.Core.ProcessHelper do
@moduledoc false
require Membrane.Core.ProcessHelper
require Membrane.Logger
defguardp is_shutdown_tuple(reason)
when is_tuple(reason) and tuple_size(reason) == 2 and elem(reason, 0) == :shutdown
defguard is_silent_exit_reason(reason)
when reason in [:normal, :shutdown] or is_shutdown_tuple(reason)
@doc """
This is a hack to exit with a custom reason, but without having GenServer
exit logs occurring when the exit reason is neither :normal, :shutdown
nor {:shutdown, reason}
"""
@spec notoelo(any(), log?: boolean()) :: no_return()
def notoelo(reason, opts \\ [])
def notoelo(reason, log?: false) do
do_notoelo(reason)
end
def notoelo(reason, _opts) when is_silent_exit_reason(reason) do
do_notoelo(reason)
end
def notoelo(reason, _opts) do
Membrane.Logger.error("Terminating with reason: #{inspect(reason)}")
do_notoelo(reason)
end
defp do_notoelo(reason) do
Process.flag(:trap_exit, false)
Process.exit(self(), reason)
end
end