Skip to content

Commit

Permalink
Use pthread_rwlock_wrlock instead of the incorrect use of pthread_rdl…
Browse files Browse the repository at this point in the history
…ock_wrlock when tearing down a connection.
  • Loading branch information
mikebrady committed Oct 31, 2023
1 parent d8c741e commit 5f9a88f
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions rtsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -594,7 +594,8 @@ int get_play_lock(rtsp_conn_info *conn, int allow_session_interruption) {
principal_conn->connection_number);
} else if (allow_session_interruption != 0) {
rtsp_conn_info *previous_principal_conn = principal_conn;
principal_conn = NULL; // no longer the principal conn
// important -- demote the principal conn before cancelling it
principal_conn = NULL;
pthread_cancel(previous_principal_conn->thread);
// the previous principal thread will block on the principal conn lock when exiting
// so it's important not to wait for it here, e.g. don't put in a pthread_join here.
Expand Down Expand Up @@ -2715,7 +2716,7 @@ void teardown_phase_two(rtsp_conn_info *conn) {
}

// only update these things if you're (still) the principal conn
pthread_rwlock_rdlock(&principal_conn_lock); // don't let the principal_conn be changed
pthread_rwlock_wrlock(&principal_conn_lock); // don't let the principal_conn be changed
pthread_cleanup_push(rwlock_unlock, (void *)&principal_conn_lock);
if (principal_conn == conn) {
if (conn->airplay_stream_category == ptp_stream) {
Expand Down Expand Up @@ -2781,7 +2782,7 @@ void teardown(rtsp_conn_info *conn) {
}

// only update these things if you're (still) the principal conn
pthread_rwlock_rdlock(&principal_conn_lock); // don't let the principal_conn be changed
pthread_rwlock_wrlock(&principal_conn_lock); // don't let the principal_conn be changed
pthread_cleanup_push(rwlock_unlock, (void *)&principal_conn_lock);
if (principal_conn == conn) {
#ifdef CONFIG_AIRPLAY_2
Expand Down

0 comments on commit 5f9a88f

Please sign in to comment.