@@ -181,15 +181,21 @@ JL_DLLEXPORT void jl_get_backtrace(jl_array_t **btout, jl_array_t **bt2out)
181181// with the top of the stack and returning up to `max_entries`. If requested by
182182// setting the `include_bt` flag, backtrace data in bt,bt2 format is
183183// interleaved.
184- JL_DLLEXPORT jl_value_t * jl_get_excstack (jl_value_t * task , int include_bt , int max_entries )
184+ JL_DLLEXPORT jl_value_t * jl_get_excstack (jl_task_t * task , int include_bt , int max_entries )
185185{
186- JL_TYPECHK (catch_stack , task , task );
186+ JL_TYPECHK (catch_stack , task , (jl_value_t * )task );
187+ jl_ptls_t ptls = jl_get_ptls_states ();
188+ if (task != ptls -> current_task &&
189+ task -> state != failed_sym && task -> state != done_sym ) {
190+ jl_error ("Inspecting the exception stack of a task which might "
191+ "be running concurrently isn't allowed." );
192+ }
187193 jl_array_t * stack = NULL ;
188194 jl_array_t * bt = NULL ;
189195 jl_array_t * bt2 = NULL ;
190196 JL_GC_PUSH3 (& stack , & bt , & bt2 );
191197 stack = jl_alloc_array_1d (jl_array_any_type , 0 );
192- jl_excstack_t * excstack = (( jl_task_t * ) task ) -> excstack ;
198+ jl_excstack_t * excstack = task -> excstack ;
193199 size_t itr = excstack ? excstack -> top : 0 ;
194200 int i = 0 ;
195201 while (itr > 0 && i < max_entries ) {
0 commit comments