Am 22.07.2018 um 10:04 schrieb Nguyễn Thái Ngọc Duy:
+ if (size < pack->oe_delta_size_limit) {
+ e->delta_size_ = size;
+ e->delta_size_valid = 1;
+ } else {
+ packing_data_lock(pack);
+ if (!pack->delta_size)
+ ALLOC_ARRAY(pack->delta_size, pack->nr_alloc);
+ packing_data_unlock(pack);
+
+ pack->delta_size[e - pack->objects] = size;
My first thought was that this is wrong (falling prey to the same
mistake as the double-checked locking pattern). But after thinking twice
over it again, I think that this unprotected access of pack->delta_size
is thread-safe.
Of course, I'm assuming that different threads never assign to the same
array index.
+ e->delta_size_valid = 0;
+ }
}
-- Hannes