diff options
author | Sverker Eriksson <[email protected]> | 2017-01-16 20:56:34 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2017-01-16 20:56:34 +0100 |
commit | 3046ab2d72fe1a5b450640d776446b373a22c168 (patch) | |
tree | 8bb24ef425d0e3a4954fc2a5fb32ec3227dbb72f /erts/emulator/beam/index.c | |
parent | cc742052e0cb63a7c38dde2e4a39ba689832492a (diff) | |
parent | 228e34eb3eb75dd0cac1c7137861ee4a7b5b3f69 (diff) | |
download | otp-3046ab2d72fe1a5b450640d776446b373a22c168.tar.gz otp-3046ab2d72fe1a5b450640d776446b373a22c168.tar.bz2 otp-3046ab2d72fe1a5b450640d776446b373a22c168.zip |
Merge branch 'maint'
Diffstat (limited to 'erts/emulator/beam/index.c')
-rw-r--r-- | erts/emulator/beam/index.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/erts/emulator/beam/index.c b/erts/emulator/beam/index.c index c86a2122f6..cd834e2c12 100644 --- a/erts/emulator/beam/index.c +++ b/erts/emulator/beam/index.c @@ -91,9 +91,16 @@ index_put_entry(IndexTable* t, void* tmpl) t->seg_table[ix>>INDEX_PAGE_SHIFT] = erts_alloc(t->type, sz); t->size += INDEX_PAGE_SIZE; } - t->entries++; p->index = ix; t->seg_table[ix>>INDEX_PAGE_SHIFT][ix&INDEX_PAGE_MASK] = p; + + /* + * Do a write barrier here to allow readers to do lock free iteration. + * erts_index_num_entries() does matching read barrier. + */ + ERTS_SMP_WRITE_MEMORY_BARRIER; + t->entries++; + return p; } |