summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2010-12-20 17:15:54 +0000
committerRussell Bryant <russell@russellbryant.com>2010-12-20 17:15:54 +0000
commitcc0b7e7df540e5833c79c9b12ef880f03a74b922 (patch)
treed1049b4c6e02a7236e3a64c09f10633b99decc64 /res
parentcf655aa1c9acabad60dcd9febd952de136b9838d (diff)
Some scheduler API cleanup and improvements.
Previously, I had added the ast_sched_thread stuff that was a generic scheduler thread implementation. However, if you used it, it required using different functions for modifying scheduler contents. This patch reworks how this is done and just allows you to optionally start a thread on the original scheduler context structure that has always been there. This makes it trivial to switch to the generic scheduler thread implementation without having to touch any of the other code that adds or removes scheduler entries. In passing, I made some naming tweaks to add ast_ prefixes where they were not there before. Review: https://reviewboard.asterisk.org/r/1007/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@299091 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res')
-rw-r--r--res/res_calendar.c4
-rw-r--r--res/res_rtp_asterisk.c6
-rw-r--r--res/res_rtp_multicast.c4
-rw-r--r--res/res_stun_monitor.c22
4 files changed, 23 insertions, 13 deletions
diff --git a/res/res_calendar.c b/res/res_calendar.c
index 5457f86f8..f95c17de2 100644
--- a/res/res_calendar.c
+++ b/res/res_calendar.c
@@ -165,7 +165,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define CALENDAR_BUCKETS 19
static struct ao2_container *calendars;
-static struct sched_context *sched;
+static struct ast_sched_context *sched;
static pthread_t refresh_thread = AST_PTHREADT_NULL;
static ast_mutex_t refreshlock;
static ast_cond_t refresh_condition;
@@ -1696,7 +1696,7 @@ static int load_module(void)
ast_cond_init(&refresh_condition, NULL);
ast_mutex_init(&reloadlock);
- if (!(sched = sched_context_create())) {
+ if (!(sched = ast_sched_context_create())) {
ast_log(LOG_ERROR, "Unable to create sched context\n");
return AST_MODULE_LOAD_FAILURE;
}
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index 72032de60..785b4040d 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -159,7 +159,7 @@ struct ast_rtp {
int *ioid;
unsigned short seqno; /*!< Sequence number, RFC 3550, page 13. */
unsigned short rxseqno;
- struct sched_context *sched;
+ struct ast_sched_context *sched;
struct io_context *io;
void *data;
struct ast_rtcp *rtcp;
@@ -251,7 +251,7 @@ struct rtp_red {
AST_LIST_HEAD_NOLOCK(frame_list, ast_frame);
/* Forward Declarations */
-static int ast_rtp_new(struct ast_rtp_instance *instance, struct sched_context *sched, struct ast_sockaddr *addr, void *data);
+static int ast_rtp_new(struct ast_rtp_instance *instance, struct ast_sched_context *sched, struct ast_sockaddr *addr, void *data);
static int ast_rtp_destroy(struct ast_rtp_instance *instance);
static int ast_rtp_dtmf_begin(struct ast_rtp_instance *instance, char digit);
static int ast_rtp_dtmf_end(struct ast_rtp_instance *instance, char digit);
@@ -434,7 +434,7 @@ static int create_new_socket(const char *type, int af)
}
static int ast_rtp_new(struct ast_rtp_instance *instance,
- struct sched_context *sched, struct ast_sockaddr *addr,
+ struct ast_sched_context *sched, struct ast_sockaddr *addr,
void *data)
{
struct ast_rtp *rtp = NULL;
diff --git a/res/res_rtp_multicast.c b/res/res_rtp_multicast.c
index 56a8cd23c..4ec71f26e 100644
--- a/res/res_rtp_multicast.c
+++ b/res/res_rtp_multicast.c
@@ -89,7 +89,7 @@ struct multicast_rtp {
};
/* Forward Declarations */
-static int multicast_rtp_new(struct ast_rtp_instance *instance, struct sched_context *sched, struct ast_sockaddr *addr, void *data);
+static int multicast_rtp_new(struct ast_rtp_instance *instance, struct ast_sched_context *sched, struct ast_sockaddr *addr, void *data);
static int multicast_rtp_activate(struct ast_rtp_instance *instance);
static int multicast_rtp_destroy(struct ast_rtp_instance *instance);
static int multicast_rtp_write(struct ast_rtp_instance *instance, struct ast_frame *frame);
@@ -106,7 +106,7 @@ static struct ast_rtp_engine multicast_rtp_engine = {
};
/*! \brief Function called to create a new multicast instance */
-static int multicast_rtp_new(struct ast_rtp_instance *instance, struct sched_context *sched, struct ast_sockaddr *addr, void *data)
+static int multicast_rtp_new(struct ast_rtp_instance *instance, struct ast_sched_context *sched, struct ast_sockaddr *addr, void *data)
{
struct multicast_rtp *multicast;
const char *type = data;
diff --git a/res/res_stun_monitor.c b/res/res_stun_monitor.c
index bec76c826..8ce77141d 100644
--- a/res/res_stun_monitor.c
+++ b/res/res_stun_monitor.c
@@ -39,7 +39,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static const int DEFAULT_MONITOR_REFRESH = 30;
static const char stun_conf_file[] = "res_stun_monitor.conf";
-static struct ast_sched_thread *sched;
+static struct ast_sched_context *sched;
static struct {
struct sockaddr_in stunaddr; /*!< The stun address we send requests to*/
@@ -150,7 +150,8 @@ monitor_request_cleanup:
static void stun_stop_monitor(void)
{
if (sched) {
- sched = ast_sched_thread_destroy(sched);
+ ast_sched_context_destroy(sched);
+ sched = NULL;
ast_log(LOG_NOTICE, "STUN monitor stopped\n");
}
/* it is only safe to destroy the socket without holding arg->lock
@@ -188,20 +189,29 @@ static int stun_start_monitor(void)
return 0; /* already started */
}
- if (!(sched = ast_sched_thread_create())) {
- ast_log(LOG_ERROR, "Failed to create stun monitor scheduler thread\n");
+ if (!(sched = ast_sched_context_create())) {
+ ast_log(LOG_ERROR, "Failed to create stun monitor scheduler context\n");
stun_close_sock();
return -1;
}
- if (ast_sched_thread_add_variable(sched, (args.refresh * 1000), stun_monitor_request, NULL, 1) < 0) {
+ if (ast_sched_start_thread(sched)) {
+ ast_sched_context_destroy(sched);
+ sched = NULL;
+ stun_close_sock();
+ return -1;
+ }
+
+ if (ast_sched_add_variable(sched, (args.refresh * 1000), stun_monitor_request, NULL, 1) < 0) {
ast_log(LOG_ERROR, "Unable to schedule STUN network monitor \n");
- sched = ast_sched_thread_destroy(sched);
+ ast_sched_context_destroy(sched);
+ sched = NULL;
stun_close_sock();
return -1;
}
ast_log(LOG_NOTICE, "STUN monitor started\n");
+
return 0;
}