mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-10-20 02:04:13 +00:00
FS-8811 #resolve [FS 1.7 crashes intermittently]
This commit is contained in:
1 parent
89c2abaff2
commit
550029b80e
14 files changed
+75
-68
No files matched your search
@@ -2810,7 +2810,6 @@ SWITCH_STANDARD_APP(playback_function)
|
||||
status = switch_ivr_play_file(session, &fh, file, &args);
|
||||
switch_assert(!(fh.flags & SWITCH_FILE_OPEN));
|
||||
|
||||
|
||||
switch (status) {
|
||||
case SWITCH_STATUS_SUCCESS:
|
||||
case SWITCH_STATUS_BREAK:
|
||||
@@ -4782,9 +4781,9 @@ static switch_status_t next_file(switch_file_handle_t *handle)
|
||||
|
||||
|
||||
if (switch_test_flag((&context->fh), SWITCH_FILE_NATIVE)) {
|
||||
switch_set_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
} else {
|
||||
switch_clear_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
}
|
||||
|
||||
|
||||
@@ -5003,9 +5002,9 @@ static switch_status_t file_url_file_open(switch_file_handle_t *handle, const ch
|
||||
handle->max_samples = 0;
|
||||
|
||||
if (switch_test_flag(fh, SWITCH_FILE_NATIVE)) {
|
||||
switch_set_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
} else {
|
||||
switch_clear_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
}
|
||||
}
|
||||
return status;
|
||||
|
||||
@@ -2986,9 +2986,9 @@ static switch_status_t file_open(switch_file_handle_t *handle, const char *path,
|
||||
handle->flags |= SWITCH_FILE_NOMUX;
|
||||
|
||||
if (switch_test_flag((&context->fh), SWITCH_FILE_NATIVE)) {
|
||||
switch_set_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
} else {
|
||||
switch_clear_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
|
||||
@@ -1713,9 +1713,9 @@ static switch_status_t http_cache_file_open(switch_file_handle_t *handle, const
|
||||
handle->flags |= SWITCH_FILE_NOMUX;
|
||||
|
||||
if (switch_test_flag((&context->fh), SWITCH_FILE_NATIVE)) {
|
||||
switch_set_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
} else {
|
||||
switch_clear_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
}
|
||||
|
||||
return status;
|
||||
|
||||
@@ -935,9 +935,9 @@ static switch_status_t control_playback(switch_core_session_t *session, void *in
|
||||
|
||||
if (dtmf->digit == *cc->profile->pause_key) {
|
||||
if (switch_test_flag(fh, SWITCH_FILE_PAUSE)) {
|
||||
switch_clear_flag(fh, SWITCH_FILE_PAUSE);
|
||||
switch_clear_flag_locked(fh, SWITCH_FILE_PAUSE);
|
||||
} else {
|
||||
switch_set_flag(fh, SWITCH_FILE_PAUSE);
|
||||
switch_set_flag_locked(fh, SWITCH_FILE_PAUSE);
|
||||
}
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -626,9 +626,9 @@ static switch_status_t next_file(switch_file_handle_t *handle)
|
||||
handle->interval = context->fh.interval;
|
||||
|
||||
if (switch_test_flag((&context->fh), SWITCH_FILE_NATIVE)) {
|
||||
switch_set_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
} else {
|
||||
switch_clear_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
@@ -878,13 +878,13 @@ static switch_status_t fileman_file_open(switch_file_handle_t *handle, const cha
|
||||
handle->interval = context->fh.interval;
|
||||
|
||||
if (switch_test_flag((&context->fh), SWITCH_FILE_NATIVE)) {
|
||||
switch_set_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
} else {
|
||||
switch_clear_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
}
|
||||
|
||||
if (handle->params && switch_true(switch_event_get_header(handle->params, "pause"))) {
|
||||
switch_set_flag(handle, SWITCH_FILE_PAUSE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_PAUSE);
|
||||
}
|
||||
|
||||
if (handle->seekable && start_offset_ms) {
|
||||
@@ -1071,7 +1071,7 @@ static switch_status_t fileman_file_read(switch_file_handle_t *handle, void *dat
|
||||
if (switch_test_flag(fh, SWITCH_FILE_SEEK)) {
|
||||
/* file position has changed flush the buffer */
|
||||
switch_buffer_zero(fh->audio_buffer);
|
||||
switch_clear_flag(fh, SWITCH_FILE_SEEK);
|
||||
switch_clear_flag_locked(fh, SWITCH_FILE_SEEK);
|
||||
}
|
||||
|
||||
/* generate speed frames */
|
||||
@@ -1216,15 +1216,15 @@ static switch_status_t fileman_process_cmd(const char *cmd, switch_file_handle_t
|
||||
|
||||
return SWITCH_STATUS_FALSE;
|
||||
} else if (!strcasecmp(cmd, "pause")) {
|
||||
switch_set_flag(fhp, SWITCH_FILE_PAUSE);
|
||||
switch_set_flag_locked(fhp, SWITCH_FILE_PAUSE);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
} else if (!strcasecmp(cmd, "resume")) {
|
||||
switch_clear_flag(fhp, SWITCH_FILE_PAUSE);
|
||||
switch_clear_flag_locked(fhp, SWITCH_FILE_PAUSE);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
} else if (!strcasecmp(cmd, "stop")) {
|
||||
switch_log_printf(SWITCH_CHANNEL_UUID_LOG(context->uuid), SWITCH_LOG_DEBUG, "Stopping file\n");
|
||||
context->done = 1;
|
||||
switch_set_flag(fhp, SWITCH_FILE_DONE);
|
||||
switch_set_flag_locked(fhp, SWITCH_FILE_DONE);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
} else if (!strcasecmp(cmd, "truncate")) {
|
||||
switch_core_file_truncate(fhp, 0);
|
||||
|
||||
@@ -592,14 +592,16 @@ static void *SWITCH_THREAD_FUNC read_stream_thread(switch_thread_t *thread, void
|
||||
if (!cp->ready) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch_mutex_lock(cp->audio_mutex);
|
||||
|
||||
switch_mutex_lock(cp->audio_mutex);
|
||||
|
||||
if (switch_test_flag(cp->handle, SWITCH_FILE_OPEN)) {
|
||||
if (source->has_video) {
|
||||
switch_set_flag(cp->handle, SWITCH_FILE_FLAG_VIDEO);
|
||||
if (source->has_video && !switch_test_flag(cp->handle, SWITCH_FILE_FLAG_VIDEO)) {
|
||||
switch_set_flag_locked(cp->handle, SWITCH_FILE_FLAG_VIDEO);
|
||||
} else {
|
||||
switch_clear_flag(cp->handle, SWITCH_FILE_FLAG_VIDEO);
|
||||
if (switch_test_flag(cp->handle, SWITCH_FILE_FLAG_VIDEO)) {
|
||||
switch_clear_flag_locked(cp->handle, SWITCH_FILE_FLAG_VIDEO);
|
||||
}
|
||||
}
|
||||
|
||||
if (switch_test_flag(cp->handle, SWITCH_FILE_CALLBACK)) {
|
||||
@@ -854,7 +856,7 @@ static switch_status_t local_stream_file_open(switch_file_handle_t *handle, cons
|
||||
|
||||
if (!switch_core_has_video() ||
|
||||
(switch_test_flag(handle, SWITCH_FILE_FLAG_VIDEO) && !source->has_video && !source->blank_img && !source->cover_art && !source->banner_txt)) {
|
||||
switch_clear_flag(handle, SWITCH_FILE_FLAG_VIDEO);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_FLAG_VIDEO);
|
||||
}
|
||||
|
||||
context->source = source;
|
||||
@@ -888,9 +890,11 @@ static switch_status_t local_stream_file_close(switch_file_handle_t *handle)
|
||||
|
||||
//pool = context->pool;
|
||||
source = context->source;
|
||||
context->ready = 0;
|
||||
|
||||
switch_mutex_lock(source->mutex);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_OPEN);
|
||||
context->ready = 0;
|
||||
|
||||
for (cp = source->context_list; cp; cp = cp->next) {
|
||||
if (cp == context) {
|
||||
if (last) {
|
||||
|
||||
@@ -451,9 +451,9 @@ static switch_status_t next_file(switch_file_handle_t *handle)
|
||||
handle->interval = context->fh.interval;
|
||||
|
||||
if (switch_test_flag((&context->fh), SWITCH_FILE_NATIVE)) {
|
||||
switch_set_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_set_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
} else {
|
||||
switch_clear_flag(handle, SWITCH_FILE_NATIVE);
|
||||
switch_clear_flag_locked(handle, SWITCH_FILE_NATIVE);
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
|
||||
@@ -347,9 +347,9 @@ switch_status_t FSSession::StreamInputCallback(switch_core_session_t *session, v
|
||||
return SWITCH_STATUS_FALSE;
|
||||
} else if (!strcasecmp(ret, "pause")) {
|
||||
if (switch_test_flag(fh, SWITCH_FILE_PAUSE)) {
|
||||
switch_clear_flag(fh, SWITCH_FILE_PAUSE);
|
||||
switch_clear_flag_locked(fh, SWITCH_FILE_PAUSE);
|
||||
} else {
|
||||
switch_set_flag(fh, SWITCH_FILE_PAUSE);
|
||||
switch_set_flag_locked(fh, SWITCH_FILE_PAUSE);
|
||||
}
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
} else if (!strcasecmp(ret, "truncate")) {
|
||||
@@ -416,9 +416,9 @@ switch_status_t FSSession::RecordInputCallback(switch_core_session_t *session, v
|
||||
|
||||
if (!strcasecmp(ret, "pause")) {
|
||||
if (switch_test_flag(fh, SWITCH_FILE_PAUSE)) {
|
||||
switch_clear_flag(fh, SWITCH_FILE_PAUSE);
|
||||
switch_clear_flag_locked(fh, SWITCH_FILE_PAUSE);
|
||||
} else {
|
||||
switch_set_flag(fh, SWITCH_FILE_PAUSE);
|
||||
switch_set_flag_locked(fh, SWITCH_FILE_PAUSE);
|
||||
}
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
} else if (!strcasecmp(ret, "restart")) {
|
||||
|
||||
Reference in new issue
Block a user