diff options
author | Thierry Bultel <thierry.bultel@iot.bzh> | 2019-02-20 12:24:41 +0100 |
---|---|---|
committer | Thierry Bultel <thierry.bultel@iot.bzh> | 2019-05-13 13:55:58 +0200 |
commit | 43df82896d8535f99233b4d3ab35a744b07871e0 (patch) | |
tree | ef69b33d17629f6eddd249eadc7f2c446557620a | |
parent | 622096c841403b4756f04692cd4fa20eff5417ed (diff) |
loops/avirt: forget saved loops after creationsandbox/tbultel/spec-2387
avirt needs a backup of loops, before creating the streams.
However, this breaks software dynamic streams such as those of
of type bluez-alsa, because the logic was re-calling the loop creation
at each call of the 'attach' verb.
The fix simply consists in forgetting the saved loops once they are created
Bug-AGL: SPEC-2387
Change-Id: I63f492b89233bed12de583de6e1077ac1c9c3ccf
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
-rw-r--r-- | plugins/alsa/alsa-api-loop.c | 11 | ||||
-rw-r--r-- | plugins/alsa/alsa-api-mixer.c | 6 |
2 files changed, 11 insertions, 6 deletions
diff --git a/plugins/alsa/alsa-api-loop.c b/plugins/alsa/alsa-api-loop.c index bc3c62a..a4b19f5 100644 --- a/plugins/alsa/alsa-api-loop.c +++ b/plugins/alsa/alsa-api-loop.c @@ -445,10 +445,12 @@ PUBLIC int ApiLoopAttach(SoftMixerT *mixer, AFB_ReqT request, const char * uid, AlsaSndLoopT * newLoop = NULL; + AFB_API_INFO(mixer->api, "%s: %s", __func__, json_object_get_string(argsJ)); + if (mixer->nbLoops >= mixer->max.loops) { - AFB_IfReqFailF(mixer, request, "too-small", "mixer=%s hal=%s max loop=%d", mixer->uid, uid, mixer->max.loops); + AFB_IfReqFailF(mixer, request, "too many loops", "mixer=%s hal=%s max loop=%d", mixer->uid, uid, mixer->max.loops); goto fail; - } + } switch (json_object_get_type(argsJ)) { size_t count; @@ -464,14 +466,14 @@ PUBLIC int ApiLoopAttach(SoftMixerT *mixer, AFB_ReqT request, const char * uid, count = json_object_array_length(argsJ); if (count > (mixer->max.loops - mixer->nbLoops)) { AFB_IfReqFailF(mixer, request, "too-small", "mixer=%s hal=%s max loop=%d", mixer->uid, uid, mixer->max.loops); - goto fail_loop; + goto fail; } for (int idx = 0; idx < count; idx++) { json_object *loopJ = json_object_array_get_idx(argsJ, idx); newLoop = loopCreate(mixer, uid, loopJ, streamsJ); if (newLoop == NULL) { - goto fail_loop; + goto fail; } } break; @@ -482,7 +484,6 @@ PUBLIC int ApiLoopAttach(SoftMixerT *mixer, AFB_ReqT request, const char * uid, return 0; -fail_loop: fail: return -1; } diff --git a/plugins/alsa/alsa-api-mixer.c b/plugins/alsa/alsa-api-mixer.c index c000ea8..15dae20 100644 --- a/plugins/alsa/alsa-api-mixer.c +++ b/plugins/alsa/alsa-api-mixer.c @@ -618,7 +618,11 @@ STATIC void MixerAttachVerb(AFB_ReqT request) { AFB_ApiInfo(mixer->api, "%s set LOOPS/AVIRT", __func__); error = ApiLoopAttach(mixer, request, uid, ((loopsJ) ? loopsJ : LoopsJ), streamsJ); - if (error) goto fail_loop; + if (error) + goto fail; + // Now, forget the saved LoopsJ + if (LoopsJ) + LoopsJ = NULL; } AFB_ApiInfo(mixer->api, "%s set RAMPS", __func__); |