@@ -1642,7 +1642,7 @@ static int invalidate_mt_cache(jl_typemap_entry_t *oldentry, void *closure0)
16421642 jl_value_t * loctag = NULL ;
16431643 JL_GC_PUSH1 (& loctag );
16441644 jl_array_ptr_1d_push (_jl_debug_method_invalidation , (jl_value_t * )mi );
1645- loctag = jl_cstr_to_string ("mt " );
1645+ loctag = jl_cstr_to_string ("invalidate_mt_cache " );
16461646 jl_gc_wb (_jl_debug_method_invalidation , loctag );
16471647 jl_array_ptr_1d_push (_jl_debug_method_invalidation , loctag );
16481648 JL_GC_POP ();
@@ -1693,12 +1693,27 @@ JL_DLLEXPORT void jl_method_table_disable(jl_methtable_t *mt, jl_method_t *metho
16931693 jl_typemap_visitor (mt -> cache , invalidate_mt_cache , (void * )& mt_cache_env );
16941694 // Invalidate the backedges
16951695 jl_svec_t * specializations = methodentry -> func .method -> specializations ;
1696+ int invalidated = 0 ;
1697+ jl_value_t * loctag = NULL ;
1698+ JL_GC_PUSH1 (& loctag );
16961699 size_t i , l = jl_svec_len (specializations );
16971700 for (i = 0 ; i < l ; i ++ ) {
16981701 jl_method_instance_t * mi = (jl_method_instance_t * )jl_svecref (specializations , i );
1699- if (mi )
1700- invalidate_backedges (mi , methodentry -> max_world );
1702+ if (mi ) {
1703+ invalidated = 1 ;
1704+ if (!loctag ) {
1705+ loctag = jl_cstr_to_string ("jl_method_table_disable" );
1706+ jl_gc_wb (_jl_debug_method_invalidation , loctag );
1707+ }
1708+ if (invalidate_backedges (mi , methodentry -> max_world ))
1709+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , loctag );
1710+ }
1711+ }
1712+ if (invalidated && _jl_debug_method_invalidation ) {
1713+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , (jl_value_t * )method );
1714+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , loctag );
17011715 }
1716+ JL_GC_POP ();
17021717 JL_UNLOCK (& mt -> writelock );
17031718}
17041719
@@ -1713,7 +1728,8 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
17131728 method -> primary_world = ++ jl_world_counter ;
17141729 size_t max_world = method -> primary_world - 1 ;
17151730 int invalidated = 0 ;
1716- JL_GC_PUSH1 (& oldvalue );
1731+ jl_value_t * loctag = NULL ; // debug info for invalidation
1732+ JL_GC_PUSH2 (& oldvalue , & loctag );
17171733 JL_LOCK (& mt -> writelock );
17181734 // first delete the existing entry (we'll disable it later)
17191735 struct jl_typemap_assoc search = {(jl_value_t * )type , method -> primary_world , NULL , 0 , ~(size_t )0 };
@@ -1739,12 +1755,11 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
17391755 for (i = 1 ; i < na ; i += 2 ) {
17401756 jl_value_t * backedgetyp = backedges [i - 1 ];
17411757 if (!jl_has_empty_intersection (backedgetyp , (jl_value_t * )type )) {
1742- if (_jl_debug_method_invalidation ) {
1743- jl_array_ptr_1d_push (_jl_debug_method_invalidation , (jl_value_t * )backedgetyp );
1744- }
17451758 jl_method_instance_t * backedge = (jl_method_instance_t * )backedges [i ];
17461759 invalidate_method_instance (backedge , max_world , 0 );
17471760 invalidated = 1 ;
1761+ if (_jl_debug_method_invalidation )
1762+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , (jl_value_t * )backedgetyp );
17481763 }
17491764 else {
17501765 backedges [ins ++ ] = backedges [i - 1 ];
@@ -1790,13 +1805,27 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
17901805 for (i = 0 ; i < l ; i ++ ) {
17911806 jl_method_instance_t * mi = (jl_method_instance_t * )jl_svecref (specializations , i );
17921807 if (mi != NULL && !jl_has_empty_intersection (type , (jl_value_t * )mi -> specTypes ))
1793- if (invalidate_backedges (mi , max_world ))
1808+ if (invalidate_backedges (mi , max_world )) {
17941809 invalidated = 1 ;
1810+ if (_jl_debug_method_invalidation ) {
1811+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , (jl_value_t * )mi );
1812+ if (!loctag ) {
1813+ loctag = jl_cstr_to_string ("jl_method_table_insert" );
1814+ jl_gc_wb (_jl_debug_method_invalidation , loctag );
1815+ }
1816+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , loctag );
1817+ }
1818+ }
17951819 }
17961820 }
17971821 }
17981822 if (invalidated && _jl_debug_method_invalidation ) {
17991823 jl_array_ptr_1d_push (_jl_debug_method_invalidation , (jl_value_t * )method );
1824+ if (!loctag ) {
1825+ loctag = jl_cstr_to_string ("jl_method_table_insert" );
1826+ jl_gc_wb (_jl_debug_method_invalidation , loctag );
1827+ }
1828+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , loctag );
18001829 }
18011830 update_max_args (mt , type );
18021831 JL_UNLOCK (& mt -> writelock );
0 commit comments