for (n = rb_first(&rb_col->rbtree); n; n = rb_next(n)) {
struct osl_row *r = get_row_pointer(n, rb_col->rbtree_num);
if (flags & OSL_FREE_VOLATILE)
- for (j = 0; j < t->num_volatile_columns; j++)
- free(r->volatile_objects[j].data);
+ FOR_EACH_VOLATILE_COLUMN(j, t, cd) {
+ if (cd->storage_flags & OSL_DONT_FREE)
+ continue;
+ free(r->volatile_objects[
+ t->columns[j].volatile_num].data);
+ }
+// for (j = 0; j < t->num_volatile_columns; j++)
+// free(r->volatile_objects[j].data);
free(r->volatile_objects);
}
}
/** The data for this column will have constant size. */
OSL_FIXED_SIZE = 2,
/** All values of this column will be different. */
- OSL_UNIQUE = 4
+ OSL_UNIQUE = 4,
+ /** Do not free the data for this column (\p OSL_NO_STORAGE). */
+ OSL_DONT_FREE = 8
};
struct osl_table;