mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
sync RClass::ext::iv_index_tbl
iv_index_tbl manages instance variable indexes (ID -> index). This data structure should be synchronized with other ractors so introduce some VM locks. This patch also introduced atomic ivar cache used by set/getinlinecache instructions. To make updating ivar cache (IVC), we changed iv_index_tbl data structure to manage (ID -> entry) and an entry points serial and index. IVC points to this entry so that cache update becomes atomically.
This commit is contained in:
parent
91ec5f9e39
commit
f6661f5085
Notes:
git
2020-10-17 08:18:29 +09:00
13 changed files with 299 additions and 170 deletions
|
|
@ -25,8 +25,14 @@ struct rb_subclass_entry {
|
|||
struct rb_subclass_entry *next;
|
||||
};
|
||||
|
||||
struct rb_iv_index_tbl_entry {
|
||||
uint32_t index;
|
||||
rb_serial_t class_serial;
|
||||
VALUE class_value;
|
||||
};
|
||||
|
||||
struct rb_classext_struct {
|
||||
struct st_table *iv_index_tbl;
|
||||
struct st_table *iv_index_tbl; // ID -> struct rb_iv_index_tbl_entry
|
||||
struct st_table *iv_tbl;
|
||||
#if SIZEOF_SERIAL_T == SIZEOF_VALUE /* otherwise m_tbl is in struct RClass */
|
||||
struct rb_id_table *m_tbl;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue