struct istream_snapshot {
struct istream_snapshot *prev_snapshot;
struct memarea *old_memarea;
+ void (*free)(struct istream_snapshot *snapshot);
};
enum istream_create_flag {
*_snapshot = NULL;
i_stream_snapshot_free(&snapshot->prev_snapshot);
- if (snapshot->old_memarea != NULL)
- memarea_unref(&snapshot->old_memarea);
- i_free(snapshot);
+ if (snapshot->free != NULL)
+ snapshot->free(snapshot);
+ else {
+ if (snapshot->old_memarea != NULL)
+ memarea_unref(&snapshot->old_memarea);
+ i_free(snapshot);
+ }
}
static struct istream_snapshot *