Skip to content

Commit

Permalink
Merge pull request mikebrady#72 from jclehner/fix-rtsp-deadlocks
Browse files Browse the repository at this point in the history
Fix deadlocks in RTSP code
  • Loading branch information
mikebrady committed Apr 19, 2015
2 parents 816c2a8 + 40de286 commit a7f9807
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions rtsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -681,25 +681,25 @@ static void handle_setup(rtsp_conn_info *conn,
}
char *hdr = msg_get_header(req, "Transport");
if (!hdr)
return;
goto error;

char *p;
p = strstr(hdr, "control_port=");
if (!p)
return;
goto error;
p = strchr(p, '=') + 1;
cport = atoi(p);

p = strstr(hdr, "timing_port=");
if (!p)
return;
goto error;
p = strchr(p, '=') + 1;
tport = atoi(p);

rtsp_take_player();
rtp_setup(&conn->remote, cport, tport, active_remote, &lsport,&lcport,&ltport);
if (!lsport)
return;
goto error;
char *q;
p = strstr(hdr,"control_port=");
if (p) {
Expand Down Expand Up @@ -727,6 +727,12 @@ static void handle_setup(rtsp_conn_info *conn,
msg_add_header(resp, "Session", "1");

resp->respcode = 200;
return;

error:
warn("Error in setup request.");
pthread_mutex_unlock(&play_lock);
resp->respcode = 451; // invalid arguments
}

static void handle_ignore(rtsp_conn_info *conn,
Expand Down Expand Up @@ -1124,15 +1130,15 @@ static void handle_announce(rtsp_conn_info *conn,

if (!paesiv || !prsaaeskey || !pfmtp) {
warn("required params missing from announce");
return;
goto out;
}

int len, keylen;
uint8_t *aesiv = base64_dec(paesiv, &len);
if (len != 16) {
warn("client announced aeskey of %d bytes, wanted 16", len);
free(aesiv);
return;
goto out;
}
memcpy(conn->stream.aesiv, aesiv, 16);
free(aesiv);
Expand All @@ -1143,7 +1149,7 @@ static void handle_announce(rtsp_conn_info *conn,
if (keylen != 16) {
warn("client announced rsaaeskey of %d bytes, wanted 16", keylen);
free(aeskey);
return;
goto out;
}
memcpy(conn->stream.aeskey, aeskey, 16);
free(aeskey);
Expand All @@ -1169,6 +1175,11 @@ static void handle_announce(rtsp_conn_info *conn,
resp->respcode = 453;
debug(1,"Already playing.");
}

out:
if (resp->respcode != 200 && resp->respcode != 453) {
pthread_mutex_unlock(&play_lock);
}
}


Expand Down

0 comments on commit a7f9807

Please sign in to comment.