Commit 68dc6a9
Fix set_traverse/set_clear_gc using wrong entry stride and layout
set entries are 24-byte (hash+key+key_tag_qword) with SET_ENTRY_SIZE=24,
while dict entries are 32-byte (hash+key+value+byte_tags+padding). The old
code tail-jumped to dict_traverse/dict_clear_gc which iterate with
DICT_ENTRY_SIZE=32 stride and read byte key_tag at offset 24 — completely
wrong offsets for set entries after the first slot.
Implement dedicated set_traverse and set_clear_gc that use the correct
24-byte stride, qword key_tag checks (0 for empty, 0xDEAD for tombstone),
and only visit/decref the key (no value field in sets).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent 17824c4 commit 68dc6a9
1 file changed
Lines changed: 82 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
925 | 925 | | |
926 | 926 | | |
927 | 927 | | |
928 | | - | |
929 | | - | |
930 | | - | |
931 | | - | |
932 | | - | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
933 | 967 | | |
934 | 968 | | |
935 | | - | |
936 | | - | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
937 | 1012 | | |
938 | 1013 | | |
939 | 1014 | | |
| |||
0 commit comments