stream_cb_manager_t **cbmgr)
{
SP_DEBUG_FENTER();
+
+ int err;
+ sound_pool_error_e ret = SOUND_POOL_ERROR_NONE;
SP_RETVM_IF(!pool, SOUND_POOL_ERROR_INVALID_PARAMETER, "Stream callback "
"manager can't be created for NULL sound pool");
SP_RETVM_IF(!cbmgr, SOUND_POOL_ERROR_INVALID_PARAMETER, "Can't create "
_cbmgr->isolator_callback_queue = g_async_queue_new_full(__queue_destroy_item);
- int err = pthread_mutex_init(&_cbmgr->isolator_data_mutex, NULL);
- SP_RETVM_IF(err != 0, SOUND_POOL_ERROR_INVALID_PARAMETER,
- "Error while initialize mutex for isolation thread with error[%d]", err);
+ err = pthread_mutex_init(&_cbmgr->isolator_data_mutex, NULL);
+
+ if (0 != err) {
+ SP_ERROR("Error while initialize mutex for isolation thread with error[%d].", err);
+ ret = SOUND_POOL_ERROR_OUT_OF_MEMORY;
+ GOTO_FAIL("", creturn);
+ }
_cbmgr->isolator_state_changed = FALSE;
_cbmgr->isolator_loop_run = TRUE;
err = pthread_cond_init(&_cbmgr->isolator_data_cond, NULL);
- SP_RETVM_IF(err != 0, SOUND_POOL_ERROR_INVALID_PARAMETER,
- "Error while initialize condition for isolation thread with error[%d]", err);
+
+ if (0 != err) {
+ SP_ERROR("Error while initialize condition for isolation thread with error[%d].", err);
+ ret = SOUND_POOL_ERROR_OUT_OF_MEMORY;
+ GOTO_FAIL("", creturn);
+ }
err = pthread_create(&_cbmgr->isolator_thread, NULL, &__sound_pool_callback_isolator, (void*)_cbmgr);
- SP_RETVM_IF(err != 0, SOUND_POOL_ERROR_OUT_OF_MEMORY,
- "Error while thread creating for isolation thread with error[%d]", err);
+
+ if (0 != err) {
+ SP_ERROR("Error while thread creating for isolation thread with error[%d].", err);
+ ret = SOUND_POOL_ERROR_OUT_OF_MEMORY;
+ GOTO_FAIL("", creturn);
+ }
_cbmgr->pool = pool;
pool->cbmgr = _cbmgr;
*cbmgr = _cbmgr;
SP_DEBUG_FLEAVE();
+
return SOUND_POOL_ERROR_NONE;
+
+creturn:
+ if (_cbmgr->isolator_callback_queue)
+ g_async_queue_unref(_cbmgr->isolator_callback_queue);
+ if (&_cbmgr->isolator_data_mutex)
+ pthread_mutex_destroy(&_cbmgr->isolator_data_mutex);
+ if (&_cbmgr->isolator_data_cond)
+ pthread_cond_destroy(&_cbmgr->isolator_data_cond);
+ SP_SAFE_GFREE(_cbmgr);
+
+ SP_DEBUG_FLEAVE();
+ return ret;
}
sound_pool_error_e _stream_cb_manager_destroy(stream_cb_manager_t *cbmgr)
{
SP_DEBUG_FENTER();
+ void *return_val;
+ int err;
SP_RETVM_IF(!cbmgr, SOUND_POOL_ERROR_INVALID_PARAMETER, "Can't handle callback "
"manager, it is NULL.");
sound_pool_error_e ret = SOUND_POOL_ERROR_NONE;
pthread_t thread = cbmgr->isolator_thread;
- int err = pthread_kill(thread, 0);
+ err = pthread_kill(thread, 0);
if (0 == err) {
err = pthread_cancel(thread);
if (0 != err) {
GOTO_FAIL("", creturn);
}
- void *return_val;
err = pthread_join(thread, &return_val);
if (0 != err)
SP_ERROR("Error while joining of isolation thread[%d].", err);
for (; idx < CMD_COUNT; ++idx) {
if (strncmp(cmd_start, cmd_list[idx], cmd_start_len) == 0) {
if (!fill_found) {
- strncpy(auto_fill, cmd_list[idx], MAX_COMMAND_LINE_LEN);
- fill_found = strnlen(auto_fill, MAX_COMMAND_LINE_LEN);
+ strncpy(auto_fill, cmd_list[idx], MAX_COMMAND_LINE_LEN - 1);
+ fill_found = strnlen(auto_fill, MAX_COMMAND_LINE_LEN - 1);
} else {
fill_found = get_identical_start_len(auto_fill, cmd_list[idx]);
auto_fill[fill_found] = '\0';
}
if (!fill_found)
- strncpy(fill_hint, cmd_start, MAX_COMMAND_LINE_LEN);
+ strncpy(fill_hint, cmd_start, MAX_COMMAND_LINE_LEN - 1);
else
- strncpy(fill_hint, auto_fill, MAX_COMMAND_LINE_LEN);
+ strncpy(fill_hint, auto_fill, MAX_COMMAND_LINE_LEN - 1);
return fill_found;
}
while ((opt = getopt_long(argc, argv, OPTIONS, options, NULL)) != -1) {
switch (opt) {
case 's': {
- snprintf(commands + last_cmd_end, MAX_COMMAND_LINE_LEN,
+ snprintf(commands + last_cmd_end, MAX_COMMAND_LINE_LEN - 1,
"%s %s\n", CMD_EXECUTE_SCRIPT, optarg);
last_cmd_end +=
strnlen(commands + last_cmd_end, MAX_COMMAND_LINE_LEN) + 1;