diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-10-11 16:13:50 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-10-17 16:09:15 +0200 |
commit | 4185666931d92aef13ab6a61b3644f279c71f452 (patch) | |
tree | f70716671ff27cdda5f82508b66bcb11811c86f2 /src/4a-hal-manager/4a-hal-manager.c | |
parent | 6b3269f8dbd7cf7bf16e6e73f397285b26b3c25b (diff) |
Add function that prepare closing binder on exiticefish_8.99.2icefish_8.99.1icefish/8.99.2icefish/8.99.18.99.28.99.1
Add function that prepare closing binder when exit signal is received.
That includes reverting hal api performed actions (e.g. removing added
custom ALSA control, ...) and deleting all hal api.
Register this function to be call at binder exit (using 'on_exit').
BUG-AGL: SPEC-2910
Change-Id: I49a5b65c303561bede4c93a2eb3284395fa9f1e7
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to 'src/4a-hal-manager/4a-hal-manager.c')
-rw-r--r-- | src/4a-hal-manager/4a-hal-manager.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/4a-hal-manager/4a-hal-manager.c b/src/4a-hal-manager/4a-hal-manager.c index e21b948..84e39e5 100644 --- a/src/4a-hal-manager/4a-hal-manager.c +++ b/src/4a-hal-manager/4a-hal-manager.c @@ -65,7 +65,6 @@ static int HalMgrInitApi(afb_api_t apiHandle) if(! apiHandle) return -1; - // Retrieve section config from api handle halMgrData = (struct HalMgrData *) afb_api_get_userdata(apiHandle); if(! halMgrData) return -2; @@ -103,6 +102,8 @@ static int HalMgrInitApi(afb_api_t apiHandle) } } + on_exit(&HalMgrPrepareClosingApi, (void *) apiHandle); + return 0; } @@ -144,6 +145,39 @@ int HalMgrCreateApi(afb_api_t apiHandle, struct HalMgrData *halMgrData) return afb_api_new_api(apiHandle, HAL_MANAGER_API_NAME, HAL_MANAGER_API_INFO, 1, HalMgrLoadApi, halMgrData) ? 0 : -1; } +void HalMgrPrepareClosingApi(int code, void *closure) +{ + int err; + + afb_api_t apiHandle = (afb_api_t) closure; + + struct HalMgrData *halMgrData; + + if(! apiHandle) + return; + + AFB_API_ERROR(apiHandle, + "An interrupt signal has been received, prepare closing all hal api and 'hal-manager' api"); + + halMgrData = (struct HalMgrData *) afb_api_get_userdata(apiHandle); + if(! halMgrData) { + AFB_API_ERROR(apiHandle, + "Did not succeed to get 'hal-manager' data structure, will not be able " + "to close all hal api and 'hal-manager' api properly"); + return; + } + + err = InternalHalDeleteAllApi(apiHandle, halMgrData); + if(err) { + AFB_API_ERROR(apiHandle, "Error %i happened when tried to delete all hal api", err); + return; + } + + HalUtlRemoveHalMgrData(halMgrData); + + return; +} + /******************************************************************************* * Startup function * ******************************************************************************/ |