- if (new->stack) {
- new->stack = new->stack->size ? ofpbuf_clone(new->stack) : NULL;
- }
- if (new->ofpacts) {
- new->ofpacts = (new->ofpacts_len
- ? xmemdup(new->ofpacts, new->ofpacts_len)
- : NULL);
- }
+ flow_tnl_copy__(tunnel, old->metadata.tunnel);
+ new->metadata.tunnel = tunnel;
+
+ new->stack = (new->n_stack
+ ? xmemdup(new->stack, new->n_stack * sizeof *new->stack)
+ : NULL);
+ new->ofpacts = (new->ofpacts_len
+ ? xmemdup(new->ofpacts, new->ofpacts_len)
+ : NULL);
+ new->action_set = (new->action_set_len
+ ? xmemdup(new->action_set, new->action_set_len)
+ : NULL);
+}
+
+static void
+frozen_state_free(struct frozen_state *state)
+{
+ free(state->stack);
+ free(state->ofpacts);
+ free(state->action_set);