diff --git a/src/switch_apr.c b/src/switch_apr.c index aeb10185a9..d4db415280 100644 --- a/src/switch_apr.c +++ b/src/switch_apr.c @@ -1050,7 +1050,13 @@ SWITCH_DECLARE(unsigned int) switch_queue_size(switch_queue_t *queue) SWITCH_DECLARE(switch_status_t) switch_queue_pop(switch_queue_t *queue, void **data) { - return apr_queue_pop(queue, data); + apr_status_t s; + + do { + s = apr_queue_pop(queue, data); + } while (s == APR_EINTR); + + return s; } SWITCH_DECLARE(switch_status_t) switch_queue_pop_timeout(switch_queue_t *queue, void **data, switch_interval_time_t timeout) @@ -1072,7 +1078,14 @@ SWITCH_DECLARE(switch_status_t) switch_queue_push(switch_queue_t *queue, void *d SWITCH_DECLARE(switch_status_t) switch_queue_trypop(switch_queue_t *queue, void **data) { - return apr_queue_trypop(queue, data); + apr_status_t s; + + do { + s = apr_queue_trypop(queue, data); + } while (s == APR_EINTR); + + return s; + } SWITCH_DECLARE(switch_status_t) switch_queue_interrupt_all(switch_queue_t *queue)