- i += (int)complex_descriptors [i];
- }
- if (complex_descriptors_next + nwords > complex_descriptors_size) {
- int new_size = complex_descriptors_size * 2 + nwords;
- complex_descriptors = (gsize *)g_realloc (complex_descriptors, new_size * sizeof (gsize));
- complex_descriptors_size = new_size;
- }
- SGEN_LOG (6, "Complex descriptor %d, size: %d (total desc memory: %d)", res, nwords, complex_descriptors_size);
- complex_descriptors_next += nwords;
- complex_descriptors [res] = nwords;
+ /* Skip the bitmap words */
+ __index += (guint32)(first_word - 1);
+ __offset += (guint32)(first_word - 1);
+ } SGEN_ARRAY_LIST_END_FOREACH_SLOT;
+
+ res = sgen_array_list_alloc_block (&complex_descriptors, nwords);
+
+ SGEN_LOG (6, "Complex descriptor %d, size: %d (total desc memory: %d)", res, nwords, complex_descriptors.capacity);
+ descriptor = (gsize*)sgen_array_list_get_slot (&complex_descriptors, res);
+ descriptor [0] = nwords;