diff options
author | 2019-05-13 14:30:01 +0200 | |
---|---|---|
committer | 2019-05-14 15:14:20 +0200 | |
commit | b5206132b6fb5b060acacaf2aee45841a7792a8c (patch) | |
tree | ef69b33d17629f6eddd249eadc7f2c446557620a /plugins/alsa/alsa-transaction.c | |
parent | 6c627f8650b88b19704dd4e513fe7fff701c00c1 (diff) | |
parent | 43df82896d8535f99233b4d3ab35a744b07871e0 (diff) |
Merge branch 'sandbox/tbultel/spec-2387' into guppyguppy_7.0.4guppy_7.0.3guppy_7.0.2guppy/7.0.4guppy/7.0.3guppy/7.0.27.0.47.0.37.0.2guppy
Bug AGL: SPEC-2387
This brings the following commits from master:
* 43df828 loops/avirt: forget saved loops after creation
* 622096c plug route: added a calculation for the number of physical c..
* c950295 streams: improved log output
* 7520fbf core-pcm: fixed channels setting issues
* 293fe69 core pcm: use the same model for writing and reading audio
* e355716 pcm plugs: rework the alsa config cleanup
* eb45566 alsa-api-pcm: added an 'optional' parameter
* 93bf6e6 alsa-transaction: simplify the cleanup
* bb70b48 alsa-api-pcm: added support of quirks
* 93ca785 alsa-utils-dump: added missing ending null char
Change-Id: I8ccc641b1f6827873e479185c0098d732d1b2b0a
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
Diffstat (limited to 'plugins/alsa/alsa-transaction.c')
-rw-r--r-- | plugins/alsa/alsa-transaction.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/plugins/alsa/alsa-transaction.c b/plugins/alsa/alsa-transaction.c index dcfd028..a630bdc 100644 --- a/plugins/alsa/alsa-transaction.c +++ b/plugins/alsa/alsa-transaction.c @@ -6,16 +6,19 @@ #include "wrap-json.h" -void AlsaMixerTransactionDelete(AlsaMixerTransaction * transaction) { +static void AlsaMixerTransactionFree(AlsaMixerTransaction * transaction) { free((char*)transaction->uid); free(transaction); } AlsaMixerTransaction * AlsaMixerTransactionNew(struct SoftMixerT_ * mixer, const char * uid) { + AlsaMixerTransaction * transaction = (AlsaMixerTransaction *) malloc(sizeof(AlsaMixerTransaction)); if (transaction == NULL) goto fail; + AFB_API_INFO(mixer->api, "-------- NEW TRANSACTION %s --------", uid); + CDS_INIT_LIST_HEAD(&transaction->item_list); transaction->uid = strdup(uid); if (transaction->uid == NULL) { @@ -33,14 +36,15 @@ fail: return NULL; } -void AlsaMixerTransactionDataListDestroy(AlsaMixerTransaction* list) { - free(list); -} -void AlsaMixerTransactionObjectForget(AlsaMixerTransaction* list, void * object) { +void AlsaMixerTransactionObjectDelete(AlsaMixerTransaction* transaction, void * object, bool destructor) { AlsaMixerTransactionDataItem *item, *tmp; - cds_list_for_each_entry_safe(item, tmp, &list->item_list, list_entry) + cds_list_for_each_entry_safe(item, tmp, &transaction->item_list, list_entry) if (item->object == object) { + + if (destructor && item->destructor) + item->destructor(transaction->mixer, item->object); + cds_list_del(&item->list_entry); free(item); } @@ -88,7 +92,7 @@ fail: } -void AlsaMixerTransactionDoCleanup(AlsaMixerTransaction* transaction) { +static void AlsaMixerTransactionDoCleanup(AlsaMixerTransaction* transaction) { AlsaMixerTransactionDataItem * item, *sav; AFB_ApiInfo(transaction->mixer->api, "%s for transaction %s", __func__, transaction->uid); @@ -127,11 +131,6 @@ void AlsaMixerTransactionVerbCB(AFB_ReqT request) { } if (strcmp(action, "remove") == 0) { - AlsaMixerTransactionDoCleanup(transaction); - - // remove this transaction for the list of mixer - cds_list_del(&transaction->transaction_node); - error = afb_api_del_verb(transaction->mixer->api, transaction->uid, (void**)NULL); if (error) { AFB_ReqFail(request, "verb deletion" , "verb was not removed"); @@ -154,3 +153,10 @@ fail: return; } + +void AlsaMixerTransactionDelete(AlsaMixerTransaction * transaction) { + AlsaMixerTransactionDoCleanup(transaction); + // remove this transaction for the list of mixer + cds_list_del(&transaction->transaction_node); + AlsaMixerTransactionFree(transaction); +} |