treat EINTR returns as a BREAK (now mapped to SWITCH_STATUS_INTR), we appriciate the interrupted syscalls but we would like to continue working properly
This commit is contained in:
parent
ef880c53b2
commit
316963c594
|
@ -859,7 +859,7 @@ typedef enum {
|
||||||
SWITCH_STATUS_FALSE,
|
SWITCH_STATUS_FALSE,
|
||||||
SWITCH_STATUS_TIMEOUT,
|
SWITCH_STATUS_TIMEOUT,
|
||||||
SWITCH_STATUS_RESTART,
|
SWITCH_STATUS_RESTART,
|
||||||
SWITCH_STATUS_TERM,
|
SWITCH_STATUS_INTR,
|
||||||
SWITCH_STATUS_NOTIMPL,
|
SWITCH_STATUS_NOTIMPL,
|
||||||
SWITCH_STATUS_MEMERR,
|
SWITCH_STATUS_MEMERR,
|
||||||
SWITCH_STATUS_NOOP,
|
SWITCH_STATUS_NOOP,
|
||||||
|
@ -876,6 +876,7 @@ typedef enum {
|
||||||
SWITCH_STATUS_TOO_SMALL,
|
SWITCH_STATUS_TOO_SMALL,
|
||||||
SWITCH_STATUS_FOUND,
|
SWITCH_STATUS_FOUND,
|
||||||
SWITCH_STATUS_CONTINUE,
|
SWITCH_STATUS_CONTINUE,
|
||||||
|
SWITCH_STATUS_TERM,
|
||||||
SWITCH_STATUS_NOT_INITALIZED
|
SWITCH_STATUS_NOT_INITALIZED
|
||||||
} switch_status_t;
|
} switch_status_t;
|
||||||
|
|
||||||
|
|
|
@ -327,7 +327,7 @@ SWITCH_DECLARE(unsigned short) get_port(struct sockaddr *sa);
|
||||||
*/
|
*/
|
||||||
SWITCH_DECLARE(int) switch_build_uri(char *uri, switch_size_t size, const char *scheme, const char *user, const switch_sockaddr_t *sa, int flags);
|
SWITCH_DECLARE(int) switch_build_uri(char *uri, switch_size_t size, const char *scheme, const char *user, const switch_sockaddr_t *sa, int flags);
|
||||||
|
|
||||||
#define SWITCH_STATUS_IS_BREAK(x) (x == SWITCH_STATUS_BREAK || x == 730035 || x == 35)
|
#define SWITCH_STATUS_IS_BREAK(x) (x == SWITCH_STATUS_BREAK || x == 730035 || x == 35 || x == SWITCH_STATUS_INTR)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Return a printable name of a switch_priority_t
|
\brief Return a printable name of a switch_priority_t
|
||||||
|
|
|
@ -2440,6 +2440,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
|
||||||
recvfrom:
|
recvfrom:
|
||||||
bytes = 0;
|
bytes = 0;
|
||||||
read_loops++;
|
read_loops++;
|
||||||
|
poll_loop = 0;
|
||||||
|
|
||||||
if (!switch_rtp_ready(rtp_session)) {
|
if (!switch_rtp_ready(rtp_session)) {
|
||||||
break;
|
break;
|
||||||
|
@ -2466,21 +2467,27 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_
|
||||||
status = read_rtp_packet(rtp_session, &bytes, flags);
|
status = read_rtp_packet(rtp_session, &bytes, flags);
|
||||||
} else {
|
} else {
|
||||||
if (!SWITCH_STATUS_IS_BREAK(poll_status) && poll_status != SWITCH_STATUS_TIMEOUT) {
|
if (!SWITCH_STATUS_IS_BREAK(poll_status) && poll_status != SWITCH_STATUS_TIMEOUT) {
|
||||||
|
char tmp[128] = "";
|
||||||
|
strerror_r(poll_status, tmp, sizeof(tmp));
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Poll failed with error: %d [%s]\n", poll_status, tmp);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
poll_loop = 1;
|
poll_loop = 1;
|
||||||
rtp_session->missed_count += (poll_sec * 1000) / (rtp_session->ms_per_packet ? rtp_session->ms_per_packet / 1000 : 20);
|
|
||||||
bytes = 0;
|
|
||||||
|
|
||||||
if (rtp_session->max_missed_packets) {
|
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
|
||||||
if (rtp_session->missed_count >= rtp_session->max_missed_packets) {
|
rtp_session->missed_count += (poll_sec * 1000) / (rtp_session->ms_per_packet ? rtp_session->ms_per_packet / 1000 : 20);
|
||||||
ret = -2;
|
bytes = 0;
|
||||||
goto end;
|
|
||||||
|
if (rtp_session->max_missed_packets) {
|
||||||
|
if (rtp_session->missed_count >= rtp_session->max_missed_packets) {
|
||||||
|
ret = -2;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!(io_flags & SWITCH_IO_FLAG_NOBLOCK)) &&
|
if ((!(io_flags & SWITCH_IO_FLAG_NOBLOCK)) &&
|
||||||
(rtp_session->dtmf_data.out_digit_dur == 0 || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO))) {
|
(rtp_session->dtmf_data.out_digit_dur == 0 || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_VIDEO))) {
|
||||||
return_cng_frame();
|
return_cng_frame();
|
||||||
|
|
Loading…
Reference in New Issue