/* thread stubs */
+#ifndef WIN32
+struct apr_threadattr_t {
+ apr_pool_t *pool;
+ pthread_attr_t attr;
+ int priority;
+};
+#else
+/* this needs to be revisited when apr for windows supports thread priority settings */
+/* search for WIN32 in this file */
+struct apr_threadattr_t {
+ apr_pool_t *pool;
+ apr_int32_t detach;
+ apr_size_t stacksize;
+};
+#endif
+
+
SWITCH_DECLARE(switch_status_t) switch_threadattr_create(switch_threadattr_t ** new_attr, switch_memory_pool_t *pool)
{
- return apr_threadattr_create(new_attr, pool);
+ switch_status_t status;
+
+ if ((status = apr_threadattr_create(new_attr, pool)) == SWITCH_STATUS_SUCCESS) {
+#ifndef WIN32
+ (*new_attr)->priority = SWITCH_PRI_LOW;
+#endif
+ }
+
+ return status;
}
SWITCH_DECLARE(switch_status_t) switch_threadattr_detach_set(switch_threadattr_t *attr, int32_t on)
return apr_threadattr_stacksize_set(attr, stacksize);
}
-#ifndef WIN32
-struct apr_threadattr_t {
- apr_pool_t *pool;
- pthread_attr_t attr;
-};
-#endif
-
-SWITCH_DECLARE(switch_status_t) switch_threadattr_priority_increase(switch_threadattr_t *attr)
+SWITCH_DECLARE(switch_status_t) switch_threadattr_priority_set(switch_threadattr_t *attr, switch_thread_priority_t priority)
{
- int stat = 0;
#ifndef WIN32
- struct sched_param param;
- struct apr_threadattr_t *myattr = attr;
-
- pthread_attr_getschedparam(&myattr->attr, ¶m);
- param.sched_priority = 1;
- stat = pthread_attr_setschedparam(&myattr->attr, ¶m);
-
- if (stat == 0) {
- return SWITCH_STATUS_SUCCESS;
- }
+ attr->priority = priority;
#endif
- return stat;
+ return SWITCH_STATUS_SUCCESS;
}
static char TT_KEY[] = "1";
SWITCH_DECLARE(switch_status_t) switch_queue_pop(switch_queue_t *queue, void **data)
{
- apr_status_t s;
-
- do {
- s = apr_queue_pop(queue, data);
- } while (s == APR_EINTR);
-
- return s;
+ return apr_queue_pop(queue, data);
}
SWITCH_DECLARE(switch_status_t) switch_queue_pop_timeout(switch_queue_t *queue, void **data, switch_interval_time_t timeout)
SWITCH_DECLARE(switch_status_t) switch_queue_trypop(switch_queue_t *queue, void **data)
{
- apr_status_t s;
-
- do {
- s = apr_queue_trypop(queue, data);
- } while (s == APR_EINTR);
-
- return s;
-
+ return apr_queue_trypop(queue, data);
}
SWITCH_DECLARE(switch_status_t) switch_queue_interrupt_all(switch_queue_t *queue)