tvhtrace(LS_HTTPC, "%04X: finishing", shortid(hc));
- if (hc->hc_in_rtp_data && hc->hc_rtp_data_complete) {
- http_client_get(hc);
- pthread_mutex_unlock(&hc->hc_mutex);
- res = hc->hc_rtp_data_complete(hc);
- pthread_mutex_lock(&hc->hc_mutex);
- http_client_put(hc);
- if (res < 0)
- return http_client_flush(hc, res);
- } else if (hc->hc_data_complete) {
+ assert(!hc->hc_in_rtp_data);
+
+ if (hc->hc_data_complete) {
http_client_get(hc);
pthread_mutex_unlock(&hc->hc_mutex);
res = hc->hc_data_complete(hc);
return HTTP_CON_RECEIVING;
}
}
- if (TAILQ_FIRST(&hc->hc_wqueue) && hc->hc_code == HTTP_STATUS_OK &&
- !hc->hc_in_rtp_data) {
+ if (TAILQ_FIRST(&hc->hc_wqueue) && hc->hc_code == HTTP_STATUS_OK) {
hc->hc_code = 0;
return http_client_send_partial(hc);
}
return res;
}
r += hc->hc_csize;
- hc->hc_in_rtp_data = 1;
hc->hc_code = 0;
- res = http_client_finish(hc);
+ if (hc->hc_rtp_data_complete) {
+ http_client_get(hc);
+ pthread_mutex_unlock(&hc->hc_mutex);
+ res = hc->hc_rtp_data_complete(hc);
+ pthread_mutex_lock(&hc->hc_mutex);
+ http_client_put(hc);
+ }
hc->hc_in_rtp_data = 0;
if (res < 0)
return http_client_flush(hc, res);