Skip to content

Commit

Permalink
OOM handling fix
Browse files Browse the repository at this point in the history
  • Loading branch information
yangtse committed Feb 6, 2010
1 parent 2c2464a commit 0f4a91a
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 17 deletions.
31 changes: 18 additions & 13 deletions lib/rtsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,9 @@ CURLcode Curl_rtsp_disconnect(struct connectdata *conn) {
CURLcode Curl_rtsp_done(struct connectdata *conn,
CURLcode status, bool premature)
{
CURLcode httpStatus;
struct SessionHandle *data = conn->data;
struct RTSP *rtsp = data->state.proto.rtsp;
CURLcode httpStatus;
long CSeq_sent;
long CSeq_recv;

Expand All @@ -138,18 +139,20 @@ CURLcode Curl_rtsp_done(struct connectdata *conn,

httpStatus = Curl_http_done(conn, status, premature);

/* Check the sequence numbers */
CSeq_sent = data->state.proto.rtsp->CSeq_sent;
CSeq_recv = data->state.proto.rtsp->CSeq_recv;
if((data->set.rtspreq != RTSPREQ_RECEIVE) && (CSeq_sent != CSeq_recv)) {
failf(data, "The CSeq of this request %ld did not match the response %ld",
CSeq_sent, CSeq_recv);
return CURLE_RTSP_CSEQ_ERROR;
}
else if (data->set.rtspreq == RTSPREQ_RECEIVE &&
(conn->proto.rtspc.rtp_channel == -1)) {
infof(data, "Got an RTP Receive with a CSeq of %ld\n", CSeq_recv);
/* TODO CPC: Server -> Client logic here */
if(rtsp) {
/* Check the sequence numbers */
CSeq_sent = rtsp->CSeq_sent;
CSeq_recv = rtsp->CSeq_recv;
if((data->set.rtspreq != RTSPREQ_RECEIVE) && (CSeq_sent != CSeq_recv)) {
failf(data, "The CSeq of this request %ld did not match the response %ld",
CSeq_sent, CSeq_recv);
return CURLE_RTSP_CSEQ_ERROR;
}
else if(data->set.rtspreq == RTSPREQ_RECEIVE &&
(conn->proto.rtspc.rtp_channel == -1)) {
infof(data, "Got an RTP Receive with a CSeq of %ld\n", CSeq_recv);
/* TODO CPC: Server -> Client logic here */
}
}

return httpStatus;
Expand Down Expand Up @@ -418,6 +421,8 @@ CURLcode Curl_rtsp(struct connectdata *conn, bool *done)
p_range ? p_range : "",
p_referrer ? p_referrer : "",
p_uagent ? p_uagent : "");
if(result)
return result;

if((rtspreq == RTSPREQ_SETUP) || (rtspreq == RTSPREQ_DESCRIBE)) {
result = Curl_add_timecondition(data, req_buffer);
Expand Down
3 changes: 3 additions & 0 deletions tests/libtest/lib570.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ int test(char *URL)

test_cleanup:

if(stream_uri)
free(stream_uri);

curl_easy_cleanup(curl);
curl_global_cleanup();

Expand Down
15 changes: 11 additions & 4 deletions tests/libtest/lib571.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ int test(char *URL)
CURL *curl;
char *stream_uri = NULL;
int request=1;
FILE *protofile;
FILE *protofile = NULL;

protofile = fopen(libtest_arg2, "wb");
if(protofile == NULL) {
Expand All @@ -109,8 +109,8 @@ int test(char *URL)

if ((curl = curl_easy_init()) == NULL) {
fprintf(stderr, "curl_easy_init() failed\n");
curl_global_cleanup();
fclose(protofile);
curl_global_cleanup();
return TEST_ERR_MAJOR_BAD;
}
test_setopt(curl, CURLOPT_URL, URL);
Expand Down Expand Up @@ -163,7 +163,10 @@ int test(char *URL)
if(res)
goto test_cleanup;

stream_uri = suburl(URL, request++);
if((stream_uri = suburl(URL, request++)) == NULL) {
res = TEST_ERR_MAJOR_BAD;
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
free(stream_uri);
stream_uri = NULL;
Expand All @@ -184,7 +187,11 @@ int test(char *URL)

test_cleanup:

fclose(protofile);
if(stream_uri)
free(stream_uri);

if(protofile)
fclose(protofile);

curl_easy_cleanup(curl);
curl_global_cleanup();
Expand Down

0 comments on commit 0f4a91a

Please sign in to comment.