return 0;
fail:
- if (loopback->ctl)
+ if (loopback->ctl) {
snd_ctl_close(loopback->ctl);
- if (loopback->elm_active)
+ loopback->ctl = NULL;
+ }
+ if (loopback->elm_active) {
snd_ctl_elem_value_free(loopback->elm_active);
+ loopback->elm_active = NULL;
+ }
return -1;
}
goto fail;
}
- snd_pcm_hw_params_free(hw_params);
-
/* sw params */
if ((err = snd_pcm_sw_params_malloc(&sw_params)) < 0) {
LOGE("%s: cannot allocate software parameters structure(%s)\n", name, snd_strerror(err));
goto fail;
}
- snd_pcm_sw_params_free(sw_params);
-
dev->period_size = period_size;
dev->period_time = period_time;
dev->buffer_size = buffer_size;
}
}
+ snd_pcm_sw_params_free(sw_params);
+ snd_pcm_hw_params_free(hw_params);
+
loopback->poll_cnt++;
LOGI("%s dev(%s) opened successfully. rate(%d), ch(%d), request buffer_frame(%d)\n",