@@ -123,7 +123,8 @@ defmodule Task.Supervised do
123123 args: args ,
124124 reason: { log_value ( kind , value ) , __STACKTRACE__ } ,
125125 # using :proc_lib over Process because we want the :undefined default, not nil
126- process_label: :proc_lib . get_label ( self ( ) )
126+ process_label: :proc_lib . get_label ( self ( ) ) ,
127+ orphan_compiler_module?: orphan_compiler_module? ( kind , value )
127128 }
128129 } ,
129130 % {
@@ -138,6 +139,23 @@ defmodule Task.Supervised do
138139 end
139140 end
140141
142+ defp orphan_compiler_module? ( kind , reason ) do
143+ with :error <- kind ,
144+ :undef <- reason ,
145+ { :error_handler , :error_handler } <- :erlang . process_info ( self ( ) , :error_handler ) ,
146+ { :parent , parent } <- :erlang . process_info ( self ( ) , :parent ) ,
147+ { :error_handler , Kernel.ErrorHandler } <-
148+ ( try do
149+ :erlang . process_info ( parent , :error_handler )
150+ rescue
151+ _ -> nil
152+ end ) do
153+ true
154+ else
155+ _ -> false
156+ end
157+ end
158+
141159 defp exit_reason ( :error , reason , stacktrace ) , do: { reason , stacktrace }
142160 defp exit_reason ( :exit , reason , _stacktrace ) , do: reason
143161 defp exit_reason ( :throw , reason , stacktrace ) , do: { { :nocatch , reason } , stacktrace }
0 commit comments