From 141bbc0232b82d62a14cdac3c36b78c97ffa1b43 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Wed, 15 Jan 2014 19:03:49 +0100 Subject: [PATCH] android/hal-audio: Add support to unregister audio endpoints --- android/hal-audio.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/android/hal-audio.c b/android/hal-audio.c index d5ffd14cc..45e5aead4 100644 --- a/android/hal-audio.c +++ b/android/hal-audio.c @@ -339,6 +339,21 @@ static int ipc_open_cmd(const struct audio_codec *codec) return rsp.id; } +static int ipc_close_cmd(uint8_t endpoint_id) +{ + struct audio_cmd_close cmd; + int result; + + DBG(""); + + cmd.id = endpoint_id; + + result = audio_ipc_cmd(AUDIO_SERVICE_ID, AUDIO_OP_CLOSE, + sizeof(cmd), &cmd, NULL, NULL, NULL); + + return result; +} + static int register_endpoints(void) { struct audio_endpoint *ep = &audio_endpoints[0]; @@ -360,6 +375,20 @@ static int register_endpoints(void) return AUDIO_STATUS_SUCCESS; } +static void unregister_endpoints(void) +{ + size_t i; + + for (i = 0; i < MAX_AUDIO_ENDPOINTS; i++) { + struct audio_endpoint *ep = &audio_endpoints[i]; + + if (ep->id) { + ipc_close_cmd(ep->id); + memset(ep, 0, sizeof(*ep)); + } + } +} + static ssize_t out_write(struct audio_stream_out *stream, const void *buffer, size_t bytes) { @@ -755,6 +784,8 @@ static void *ipc_handler(void *data) if (register_endpoints() != AUDIO_STATUS_SUCCESS) { error("audio: Failed to register endpoints"); + unregister_endpoints(); + shutdown(audio_sk, SHUT_RDWR); continue; } @@ -778,6 +809,8 @@ static void *ipc_handler(void *data) pthread_mutex_unlock(&close_mutex); } + unregister_endpoints(); + info("Closing Audio IPC thread"); return NULL; } -- 2.11.0