The segfaults are seemingly at random. They all end either at
search_method or at st_lookup, which is the part which checks the hash
table for selectors ot figure out which method to send the
notification to. We're calling them on the main thread with
performSelectorOnMainThread: so it's not a cross-thread issue. Is this
some object which is being hit by GC? We're calling GC.disable while
this code is running.
st_lookup(table, key, value)
st_table *table;
register st_data_t key;
st_data_t *value;
{
unsigned int hash_val, bin_pos;
register st_table_entry *ptr;
hash_val = do_hash(key, table); # CRASHES HERE!!!!!!!!!!
FIND_ENTRY(table, ptr, hash_val, bin_pos);
if (ptr == 0) {
return 0;
}
else {
if (value != 0) *value = ptr->record;
return 1;
}
}
Exception: EXC_BAD_ACCESS (0x0001)
Codes: KERN_PROTECTION_FAILURE (0x0002) at 0x00000002
Thread 0 Crashed:
0 libruby.dylib 0x0030a0ac st_lookup + 11 (st.c:250)
1 libruby.dylib 0x002a0958 search_method + 56 (eval.c:494)
2 libruby.dylib 0x002a09ba rb_get_method_body + 39 (eval.c:515)
|