#include "voice_control_key_defines.h"
static pthread_mutex_t g_cmd_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t g_cmd_list_mutex = PTHREAD_MUTEX_INITIALIZER;
#define CMD_MUTEX_LOCK() pthread_mutex_lock(&g_cmd_mutex)
#define CMD_MUTEX_UNLOCK() pthread_mutex_unlock(&g_cmd_mutex)
+#define CMD_LIST_MUTEX_LOCK() pthread_mutex_lock(&g_cmd_list_mutex)
+#define CMD_LIST_MUTEX_UNLOCK() pthread_mutex_unlock(&g_cmd_list_mutex)
static int g_feature_enabled = -1;
static bool g_privilege_allowed = false;
return VC_ERROR_PERMISSION_DENIED;
}
+ CMD_LIST_MUTEX_LOCK();
+
if (NULL == vc_cmd_list) {
SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
+ CMD_LIST_MUTEX_UNLOCK();
return VC_ERROR_INVALID_PARAMETER;
}
if (NULL == list) {
SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Not enough memory");
+ CMD_LIST_MUTEX_UNLOCK();
return VC_ERROR_OUT_OF_MEMORY;
}
SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list(%p)", *vc_cmd_list);
+ CMD_LIST_MUTEX_UNLOCK();
return VC_ERROR_NONE;
}
return VC_ERROR_PERMISSION_DENIED;
}
+ CMD_LIST_MUTEX_LOCK();
+
if (NULL == vc_cmd_list) {
SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL");
+ CMD_LIST_MUTEX_UNLOCK();
return VC_ERROR_INVALID_PARAMETER;
}
- vc_cmd_list_remove_all(vc_cmd_list, release_command);
vc_cmd_list_s* list = NULL;
list = (vc_cmd_list_s*)vc_cmd_list;
iter = g_list_find(g_cmdlist_list, list);
if (NULL == iter) {
SLOG(LOG_ERROR, TAG_VCCMD, "Fail to destroy client : handle is not valid");
+ CMD_LIST_MUTEX_UNLOCK();
return VC_ERROR_INVALID_PARAMETER;
}
g_cmdlist_list = g_list_remove_link(g_cmdlist_list, iter);
- if (iter->data)
- free(iter->data);
- iter->data = NULL;
- iter = NULL;
+
+ vc_cmd_list_remove_all((vc_cmd_list_h)list, release_command);
+ free(list);
+ list = NULL;
+
SLOG(LOG_DEBUG, TAG_VCCMD, "Client destroy");
+
+ CMD_LIST_MUTEX_UNLOCK();
return VC_ERROR_NONE;
}
SLOG(LOG_DEBUG, TAG_VCCMD, "[List] list (%p), release command (%s)"
, list, release_command ? "true" : "false");
- if (true == release_command)
- g_slist_foreach(list->list, __vc_cmd_list_remove_all_foreach, NULL);
- g_slist_free(list->list);
- list->list = NULL;
- list->index = -1;
+ if (true == release_command) {
+ if (list->list) {
+ g_slist_foreach(list->list, __vc_cmd_list_remove_all_foreach, NULL);
+ g_slist_free(list->list);
+ list->list = NULL;
+ }
+ list->index = -1;
+ }
SLOG(LOG_DEBUG, TAG_VCCMD, "@@@");