[asterisk-commits] russell: branch russell/sched_thread r140413 - in /team/russell/sched_thread:...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Aug 28 21:40:39 CDT 2008


Author: russell
Date: Thu Aug 28 21:40:38 2008
New Revision: 140413

URL: http://svn.digium.com/view/asterisk?view=rev&rev=140413
Log:
More conversion to move the scheduler into its own thread ...

Modified:
    team/russell/sched_thread/channels/chan_sip.c
    team/russell/sched_thread/include/asterisk/sched.h
    team/russell/sched_thread/main/sched.c

Modified: team/russell/sched_thread/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/russell/sched_thread/channels/chan_sip.c?view=diff&rev=140413&r1=140412&r2=140413
==============================================================================
--- team/russell/sched_thread/channels/chan_sip.c (original)
+++ team/russell/sched_thread/channels/chan_sip.c Thu Aug 28 21:40:38 2008
@@ -10188,7 +10188,9 @@
 	} else {
 		sip_poke_peer(peer, 0);
 	}
-	AST_SCHED_REPLACE(peer->expire, sched, (expire + 10) * 1000, expire_register, peer);
+	/* XXX refcount not handled, will be fixed in another branch */
+	sched_thread_del(sched, peer->expire);
+	peer->expire = sched_thread_add(sched, (expire + 10) * 1000, expire_register, peer);
 	register_peer_exten(peer, TRUE);
 }
 
@@ -10316,12 +10318,12 @@
 	if (ast_strlen_zero(curi) && ast_strlen_zero(expires)) {
 		/* If we have an active registration, tell them when the registration is going to expire */
 		if (peer->expire > -1 && !ast_strlen_zero(peer->fullcontact))
-			pvt->expiry = ast_sched_when(sched, peer->expire);
+			pvt->expiry = sched_thread_when(sched, peer->expire);
 		return PARSE_REGISTER_QUERY;
 	} else if (!strcasecmp(curi, "*") || !expire) {	/* Unregister this peer */
 		/* This means remove all registrations and return OK */
 		memset(&peer->addr, 0, sizeof(peer->addr));
-		AST_SCHED_DEL(sched, peer->expire);
+		sched_thread_del(sched, peer->expire);
 
 		destroy_association(peer);
 		
@@ -10378,13 +10380,13 @@
 	if (!ast_strlen_zero(curi) && ast_strlen_zero(peer->username))
 		ast_copy_string(peer->username, curi, sizeof(peer->username));
 
-	AST_SCHED_DEL(sched, peer->expire);
+	sched_thread_del(sched, peer->expire);
 	if (expire > max_expiry)
 		expire = max_expiry;
 	if (expire < min_expiry)
 		expire = min_expiry;
 	peer->expire = peer->is_realtime && !ast_test_flag(&peer->flags[1], SIP_PAGE2_RTCACHEFRIENDS) ? -1 :
-		ast_sched_add(sched, (expire + 10) * 1000, expire_register, peer);
+		sched_thread_add(sched, (expire + 10) * 1000, expire_register, peer);
 	pvt->expiry = expire;
 	snprintf(data, sizeof(data), "%s:%d:%d:%s:%s", ast_inet_ntoa(peer->addr.sin_addr), ntohs(peer->addr.sin_port), expire, peer->username, peer->fullcontact);
 	/* Saving TCP connections is useless, we won't be able to reconnect 
@@ -13135,7 +13137,7 @@
 		ast_cli(fd, "  Dynamic      : %s\n", cli_yesno(peer->host_dynamic));
 		ast_cli(fd, "  Callerid     : %s\n", ast_callerid_merge(cbuf, sizeof(cbuf), peer->cid_name, peer->cid_num, "<unspecified>"));
 		ast_cli(fd, "  MaxCallBR    : %d kbps\n", peer->maxcallbitrate);
-		ast_cli(fd, "  Expire       : %ld\n", ast_sched_when(sched, peer->expire));
+		ast_cli(fd, "  Expire       : %ld\n", sched_thread_when(sched, peer->expire));
 		ast_cli(fd, "  Insecure     : %s\n", insecure2str(ast_test_flag(&peer->flags[0], SIP_INSECURE)));
 		ast_cli(fd, "  Nat          : %s\n", nat2str(ast_test_flag(&peer->flags[0], SIP_NAT)));
 		ast_cli(fd, "  ACL          : %s\n", cli_yesno(peer->ha != NULL));
@@ -13240,7 +13242,7 @@
 		astman_append(s, "MaxCallBR: %d kbps\r\n", peer->maxcallbitrate);
 		astman_append(s, "Dynamic: %s\r\n", peer->host_dynamic?"Y":"N");
 		astman_append(s, "Callerid: %s\r\n", ast_callerid_merge(cbuf, sizeof(cbuf), peer->cid_name, peer->cid_num, ""));
-		astman_append(s, "RegExpire: %ld seconds\r\n", ast_sched_when(sched, peer->expire));
+		astman_append(s, "RegExpire: %ld seconds\r\n", sched_thread_when(sched, peer->expire));
 		astman_append(s, "SIP-AuthInsecure: %s\r\n", insecure2str(ast_test_flag(&peer->flags[0], SIP_INSECURE)));
 		astman_append(s, "SIP-NatSupport: %s\r\n", nat2str(ast_test_flag(&peer->flags[0], SIP_NAT)));
 		astman_append(s, "ACL: %s\r\n", (peer->ha?"Y":"N"));
@@ -13332,7 +13334,7 @@
 		return NULL;
 	}
 	ast_cli(a->fd, "\n");
-	ast_sched_report(sched, cbuf, sizeof(cbuf), &cbnames);
+	ast_sched_report(sched_thread_get_context(sched), cbuf, sizeof(cbuf), &cbnames);
 	ast_cli(a->fd, "%s", cbuf);
 	return CLI_SUCCESS;
 }
@@ -15194,7 +15196,9 @@
 
 	/* Acknowledge sequence number - This only happens on INVITE from SIP-call */
 	/* Don't auto congest anymore since we've gotten something useful back */
-	AST_SCHED_DEL_UNREF(sched, p->initid, dialog_unref(p, "when you delete the initid sched, you should dec the refcount for the stored dialog ptr"));
+	if (sched_thread_del(sched, p->initid)) {
+		dialog_unref(p, "when you delete the initid sched, you should dec the refcount for the stored dialog ptr");
+	}
 
 	/* RFC3261 says we must treat every 1xx response (but not 100)
 	   that we don't recognize as if it was 183.
@@ -15496,7 +15500,7 @@
 				/* Reset the flag after a while 
 				 */
 				int wait = 3 + ast_random() % 5;
-				p->waitid = ast_sched_add(sched, wait, sip_reinvite_retry, dialog_ref(p, "passing dialog ptr into sched structure based on waitid for sip_reinvite_retry.")); 
+				p->waitid = sched_thread_add(sched, wait, sip_reinvite_retry, dialog_ref(p, "passing dialog ptr into sched structure based on waitid for sip_reinvite_retry.")); 
 				ast_log(LOG_WARNING, "just did sched_add waitid(%d) for sip_reinvite_retry for dialog %s in handle_response_invite\n", p->waitid, p->callid);
 				ast_debug(2, "Reinvite race. Waiting %d secs before retry\n", wait);
 			}
@@ -15633,7 +15637,7 @@
 		break;
 	case 403:	/* Forbidden */
 		ast_log(LOG_WARNING, "Forbidden - wrong password on authentication for REGISTER for '%s' to '%s'\n", p->registry->username, p->registry->hostname);
-		AST_SCHED_DEL(sched, r->timeout);
+		sched_thread_del(sched, r->timeout);
 		r->regstate = REG_STATE_NOAUTH;
 		p->needdestroy = 1;
 		break;
@@ -15643,7 +15647,7 @@
 		if (r->call)
 			r->call = dialog_unref(r->call, "unsetting registry->call pointer-- case 404");
 		r->regstate = REG_STATE_REJECTED;
-		AST_SCHED_DEL(sched, r->timeout);
+		sched_thread_del(sched, r->timeout);
 		break;
 	case 407:	/* Proxy auth */
 		if (p->authtries == MAX_AUTHTRIES || do_register_auth(p, req, resp)) {
@@ -15658,7 +15662,7 @@
 	case 423:	/* Interval too brief */
 		r->expiry = atoi(get_header(req, "Min-Expires"));
 		ast_log(LOG_WARNING, "Got 423 Interval too brief for service %s@%s, minimum is %d seconds\n", p->registry->username, p->registry->hostname, r->expiry);
-		AST_SCHED_DEL(sched, r->timeout);
+		sched_thread_del(sched, r->timeout);
 		r->timeout = -1;
 		if (r->call) {
 			r->call = dialog_unref(r->call, "unsetting registry->call pointer-- case 423");
@@ -15680,7 +15684,7 @@
 		if (r->call)
 			r->call = dialog_unref(r->call, "unsetting registry->call pointer-- case 479");
 		r->regstate = REG_STATE_REJECTED;
-		AST_SCHED_DEL(sched, r->timeout);
+		sched_thread_del(sched, r->timeout);
 		break;
 	case 200:	/* 200 OK */
 		if (!r) {
@@ -15697,7 +15701,7 @@
 		if (r->timeout > -1) {
 			ast_debug(1, "Cancelling timeout %d\n", r->timeout);
 		}
-		AST_SCHED_DEL(sched, r->timeout);
+		sched_thread_del(sched, r->timeout);
 		if (r->call)
 			r->call = dialog_unref(r->call, "unsetting registry->call pointer-- case 200");
 		p->registry = registry_unref(p->registry, "unref registry entry p->registry");
@@ -15707,7 +15711,7 @@
 		
 		/* set us up for re-registering */
 		/* figure out how long we got registered for */
-		AST_SCHED_DEL(sched, r->expire);
+		sched_thread_del(sched, r->expire);
 		
 		/* according to section 6.13 of RFC, contact headers override
 		   expires headers, so check those first */
@@ -19591,17 +19595,9 @@
 
 		pthread_testcancel();
 		/* Wait for sched or io */
-		res = ast_sched_wait(sched);
-		if ((res < 0) || (res > 1000))
-			res = 1000;
 		res = ast_io_wait(io, res);
 		if (res > 20)
 			ast_debug(1, "chan_sip: ast_io_wait ran %d all at once\n", res);
-		ast_mutex_lock(&monlock);
-		res = ast_sched_runq(sched);
-		if (res >= 20)
-			ast_debug(1, "chan_sip: ast_sched_runq ran %d all at once\n", res);
-		ast_mutex_unlock(&monlock);
 	}
 
 	/* Never reached */
@@ -19676,7 +19672,7 @@
 		return;
 	}
 
-	p->stimer->st_schedid  = ast_sched_add(sched, p->stimer->st_interval * 1000 / 2, proc_session_timer, p);
+	p->stimer->st_schedid  = sched_thread_add(sched, p->stimer->st_interval * 1000 / 2, proc_session_timer, p);
 	if (p->stimer->st_schedid < 0) {
 		ast_log(LOG_ERROR, "ast_sched_add failed.\n");
 	}
@@ -22459,7 +22455,6 @@
 	time_t start_poke, end_poke;
 	
 	reload_config(reason);
-	ast_sched_dump(sched);
 
 	start_poke = time(0);
 	/* Prune peers who still are supposed to be deleted */
@@ -22643,8 +22638,6 @@
 	struct ast_context *con;
 	struct ao2_iterator i;
 
-	ast_sched_dump(sched);
-	
 	/* First, take us out of the channel type list */
 	ast_channel_unregister(&sip_tech);
 

Modified: team/russell/sched_thread/include/asterisk/sched.h
URL: http://svn.digium.com/view/asterisk/team/russell/sched_thread/include/asterisk/sched.h?view=diff&rev=140413&r1=140412&r2=140413
==============================================================================
--- team/russell/sched_thread/include/asterisk/sched.h (original)
+++ team/russell/sched_thread/include/asterisk/sched.h Thu Aug 28 21:40:38 2008
@@ -289,6 +289,8 @@
 /*! XXX I hate this and want it to go away eventually */
 struct sched_context *sched_thread_get_context(struct sched_thread *st);
 
+long sched_thread_when(struct sched_thread *st, int id);
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif

Modified: team/russell/sched_thread/main/sched.c
URL: http://svn.digium.com/view/asterisk/team/russell/sched_thread/main/sched.c?view=diff&rev=140413&r1=140412&r2=140413
==============================================================================
--- team/russell/sched_thread/main/sched.c (original)
+++ team/russell/sched_thread/main/sched.c Thu Aug 28 21:40:38 2008
@@ -117,6 +117,11 @@
 	}
 
 	return NULL;
+}
+
+long sched_thread_when(struct sched_thread *st, int id)
+{
+	return ast_sched_when(st->context, id);
 }
 
 struct sched_context *sched_thread_get_context(struct sched_thread *st)




More information about the asterisk-commits mailing list