diff options
author | Mike Brady <mikebrady@eircom.net> | 2018-12-03 17:00:12 +0000 |
---|---|---|
committer | Mike Brady <mikebrady@eircom.net> | 2018-12-03 17:00:12 +0000 |
commit | 60315b63c90944fb4d9da78e5608cfb92d3f01b7 (patch) | |
tree | bde3268596925b490070da7a4a925c353ba85277 | |
parent | 4bb29bc198541d5dacf7cb1ba9a2fcd82f2afe86 (diff) |
Try to ensure that any alsa command sequences are uncancellable. Leave a little time afterwards where possible.
-rw-r--r-- | audio_alsa.c | 7 | ||||
-rw-r--r-- | rtsp.c | 16 |
2 files changed, 13 insertions, 10 deletions
diff --git a/audio_alsa.c b/audio_alsa.c index 9818298..c233a67 100644 --- a/audio_alsa.c +++ b/audio_alsa.c @@ -506,7 +506,8 @@ static int init(int argc, char **argv) { } else { debug(1, "alsa: no hardware mixer selected."); } - + + usleep(200000); // see if it makes a difference alsa_mix_handle = NULL; return response; } @@ -883,7 +884,7 @@ int actual_open_alsa_device(void) { break; } } - + usleep(200000); // see if it makes a difference return 0; } @@ -910,6 +911,7 @@ static void start(int i_sample_rate, int i_sample_format) { frame_index = 0; measurement_data_is_valid = 0; + usleep(200000); // see if it makes a difference } //assuming pthread cancellation is disabled @@ -1163,6 +1165,7 @@ static void flush(void) { measurement_data_is_valid = 0; alsa_handle = NULL; } + usleep(200000); // see if it makes a difference debug_mutex_unlock(&alsa_mutex, 3); pthread_cleanup_pop(0); // release the mutex pthread_setcancelstate(oldState, NULL); @@ -265,7 +265,7 @@ int have_player(rtsp_conn_info *conn) { void player_watchdog_thread_cleanup_handler(void *arg) { rtsp_conn_info *conn = (rtsp_conn_info *)arg; - debug(2, "Connection %d: Watchdog Exit.", conn->connection_number); + debug(1, "Connection %d: Watchdog Exit.", conn->connection_number); } void *player_watchdog_thread_code(void *arg) { @@ -2116,13 +2116,6 @@ void rtsp_conversation_thread_cleanup_function(void *arg) { if (rc) debug(1, "Connection %d: error %d destroying flush_mutex.", conn->connection_number, rc); - debug(2, "Cancel watchdog thread."); - pthread_cancel(conn->player_watchdog_thread); - debug(2, "Join watchdog thread."); - pthread_join(conn->player_watchdog_thread, NULL); - debug(2, "Delete watchdog mutex."); - pthread_mutex_destroy(&conn->watchdog_mutex); - debug(3, "Connection %d: Checking play lock.", conn->connection_number); debug_mutex_lock(&playing_conn_lock, 1000000, 3); // get it if (playing_conn == conn) { // if it's ours @@ -2131,6 +2124,13 @@ void rtsp_conversation_thread_cleanup_function(void *arg) { } debug_mutex_unlock(&playing_conn_lock, 3); + debug(2, "Cancel watchdog thread."); + pthread_cancel(conn->player_watchdog_thread); + debug(2, "Join watchdog thread."); + pthread_join(conn->player_watchdog_thread, NULL); + debug(2, "Delete watchdog mutex."); + pthread_mutex_destroy(&conn->watchdog_mutex); + debug(2, "Connection %d: RTSP thread terminated.", conn->connection_number); conn->running = 0; pthread_setcancelstate(oldState, NULL); |