Remove some use of Crap in hb-set.

When hb_set_t::page_for_insert needs to insert at the end of the page_map
it ends up evaluating '&page_map[i + 1]' which has hb_vector return an
lvalue of a Crap so that nothing can be moved to its address. This turns
into issues with ThreadSanitizer on Crap when two threads modify different
hb_set_t instances. This can be avoided by using '&page_map[i] + 1'
instead.
This commit is contained in:
Ben Wagner 2018-10-25 13:44:27 -04:00 committed by Behdad Esfahbod
parent 2798ac1c28
commit 94e421abbf

View File

@ -669,7 +669,7 @@ struct hb_set_t
return nullptr; return nullptr;
pages[map.index].init0 (); pages[map.index].init0 ();
memmove (&page_map[i + 1], &page_map[i], (page_map.len - 1 - i) * sizeof (page_map[0])); memmove (&page_map[i] + 1, &page_map[i], (page_map.len - 1 - i) * sizeof (page_map[0]));
page_map[i] = map; page_map[i] = map;
} }
return &pages[page_map[i].index]; return &pages[page_map[i].index];