@@ -1642,7 +1642,7 @@ static int invalidate_mt_cache(jl_typemap_entry_t *oldentry, void *closure0)
1642
1642
jl_value_t * loctag = NULL ;
1643
1643
JL_GC_PUSH1 (& loctag );
1644
1644
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 " );
1646
1646
jl_gc_wb (_jl_debug_method_invalidation , loctag );
1647
1647
jl_array_ptr_1d_push (_jl_debug_method_invalidation , loctag );
1648
1648
JL_GC_POP ();
@@ -1693,12 +1693,27 @@ JL_DLLEXPORT void jl_method_table_disable(jl_methtable_t *mt, jl_method_t *metho
1693
1693
jl_typemap_visitor (mt -> cache , invalidate_mt_cache , (void * )& mt_cache_env );
1694
1694
// Invalidate the backedges
1695
1695
jl_svec_t * specializations = methodentry -> func .method -> specializations ;
1696
+ int invalidated = 0 ;
1697
+ jl_value_t * loctag = NULL ;
1698
+ JL_GC_PUSH1 (& loctag );
1696
1699
size_t i , l = jl_svec_len (specializations );
1697
1700
for (i = 0 ; i < l ; i ++ ) {
1698
1701
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 );
1701
1715
}
1716
+ JL_GC_POP ();
1702
1717
JL_UNLOCK (& mt -> writelock );
1703
1718
}
1704
1719
@@ -1713,7 +1728,8 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
1713
1728
method -> primary_world = ++ jl_world_counter ;
1714
1729
size_t max_world = method -> primary_world - 1 ;
1715
1730
int invalidated = 0 ;
1716
- JL_GC_PUSH1 (& oldvalue );
1731
+ jl_value_t * loctag = NULL ; // debug info for invalidation
1732
+ JL_GC_PUSH2 (& oldvalue , & loctag );
1717
1733
JL_LOCK (& mt -> writelock );
1718
1734
// first delete the existing entry (we'll disable it later)
1719
1735
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
1739
1755
for (i = 1 ; i < na ; i += 2 ) {
1740
1756
jl_value_t * backedgetyp = backedges [i - 1 ];
1741
1757
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
- }
1745
1758
jl_method_instance_t * backedge = (jl_method_instance_t * )backedges [i ];
1746
1759
invalidate_method_instance (backedge , max_world , 0 );
1747
1760
invalidated = 1 ;
1761
+ if (_jl_debug_method_invalidation )
1762
+ jl_array_ptr_1d_push (_jl_debug_method_invalidation , (jl_value_t * )backedgetyp );
1748
1763
}
1749
1764
else {
1750
1765
backedges [ins ++ ] = backedges [i - 1 ];
@@ -1790,13 +1805,27 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
1790
1805
for (i = 0 ; i < l ; i ++ ) {
1791
1806
jl_method_instance_t * mi = (jl_method_instance_t * )jl_svecref (specializations , i );
1792
1807
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 )) {
1794
1809
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
+ }
1795
1819
}
1796
1820
}
1797
1821
}
1798
1822
if (invalidated && _jl_debug_method_invalidation ) {
1799
1823
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 );
1800
1829
}
1801
1830
update_max_args (mt , type );
1802
1831
JL_UNLOCK (& mt -> writelock );
0 commit comments