On Tue, Jan 16, 2024 at 11:08 AM David Rowley <dgrowle...@gmail.com> wrote:

> I've now adjusted the patch to have all modifications to Bitmapsets
> return a newly allocated set. There are a few cases missing in master
> that need to be fixed (items 6-10 below):
>
> The patch now includes changes for the following:
>
> 1. Document what REALLOCATE_BITMAPSETS is for.
> 2. Provide a reusable function to check a set is valid and use it in
> cassert builds and use it to validate sets (Richard)
> 3. Provide a reusable function to copy a set and pfree the original
> and use that instead of duplicating that code all over bitmapset.c
> 4. Fix Assert duplication (Richard)
> 5. Make comments in bms_union, bms_intersect, bms_difference clear
> that a new set is allocated.  (This has annoyed me for a while)
> 6. Fix failure to duplicate the set in bms_add_members() when b == NULL.
> 7. Fix failure to duplicate the set in bms_add_range() when upper < lower
> 8. Fix failure to duplicate the set in bms_add_range() when the set
> has enough words already.
> 9. Fix failure to duplicate the set in bms_del_members() when b == NULL
> 10. Fix failure to duplicate the set in bms_join() when a == NULL and
> also fix the b == NULL case too
> 11. Fix hazard in bms_add_members(), bms_int_members(),
> bms_del_members() and bms_join(),  where the code added in 7d58f2342
> could crash if a == b due to the REALLOCATE_BITMAPSETS code pfreeing
> 'a'. This happens in knapsack.c:93, although I propose we adjust that
> code now that empty sets are always represented as NULL.


Thank you so much for all the work you have put into making this patch
perfect.  I reviewed through the v3 patch and I do not have further
comments.  I think it's in good shape now.

Thanks
Richard

Reply via email to