mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-08 22:27:07 +00:00
core: Use eventfd for alert pipes on Linux when possible
The primary win of switching to eventfd when possible is that it only uses a single file descriptor while pipe() will use two. This means for each bridge channel we're reducing the number of required file descriptors by 1, and - if you're using timerfd - we also now have 1 less file descriptor per Asterisk channel. The API is not ideal (passing int arrays), but this is the cleanest approach I could come up with to maintain API/ABI. I've also removed what I believe to be an erroneous code block that checked the non-blocking flag on the pipe ends for each read. If the file descriptor is 'losing' its non-blocking mode, it is because of a bug somewhere else in our code. In my testing I haven't seen any measurable difference in performance. Change-Id: Iff0fb1573e7f7a187d5211ddc60aa8f3da3edb1d
This commit is contained in:
@@ -123,6 +123,7 @@ References:
|
||||
#ifndef _ASTERISK_CHANNEL_H
|
||||
#define _ASTERISK_CHANNEL_H
|
||||
|
||||
#include "asterisk/alertpipe.h"
|
||||
#include "asterisk/abstract_jb.h"
|
||||
#include "asterisk/astobj2.h"
|
||||
#include "asterisk/poll-compat.h"
|
||||
@@ -4220,12 +4221,6 @@ struct ast_namedgroups *ast_channel_named_pickupgroups(const struct ast_channel
|
||||
void ast_channel_named_pickupgroups_set(struct ast_channel *chan, struct ast_namedgroups *value);
|
||||
|
||||
/* Alertpipe accessors--the "internal" functions for channel.c use only */
|
||||
typedef enum {
|
||||
AST_ALERT_READ_SUCCESS = 0,
|
||||
AST_ALERT_NOT_READABLE,
|
||||
AST_ALERT_READ_FAIL,
|
||||
AST_ALERT_READ_FATAL,
|
||||
} ast_alert_status_t;
|
||||
int ast_channel_alert_write(struct ast_channel *chan);
|
||||
int ast_channel_alert_writable(struct ast_channel *chan);
|
||||
ast_alert_status_t ast_channel_internal_alert_flush(struct ast_channel *chan);
|
||||
|
Reference in New Issue
Block a user