[svn-commits] rizzo: branch rizzo/astobj2 r47393 - /team/rizzo/astobj2/channels/chan_sip.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Thu Nov 9 14:42:39 MST 2006


Author: rizzo
Date: Thu Nov  9 15:42:38 2006
New Revision: 47393

URL: http://svn.digium.com/view/asterisk?view=rev&rev=47393
Log:
small reordering of lines and removal of code unused in the astobj2 case


Modified:
    team/rizzo/astobj2/channels/chan_sip.c

Modified: team/rizzo/astobj2/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/rizzo/astobj2/channels/chan_sip.c?view=diff&rev=47393&r1=47392&r2=47393
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Thu Nov  9 15:42:38 2006
@@ -82,6 +82,7 @@
  * the sip_hangup() function
  */
 
+// #define	USE_AO2		// enable to use astobj2
 
 #include "asterisk.h"
 
@@ -874,7 +875,10 @@
  */
 
 struct sip_pvt {
+#ifndef USE_AO2
+	struct sip_pvt *next;			/*!< Next dialog in chain */
 	ast_mutex_t pvt_lock;			/*!< Dialog private lock */
+#endif
 	int method;				/*!< SIP method that opened this dialog */
 	AST_DECLARE_STRING_FIELDS(
 		AST_STRING_FIELD(callid);	/*!< Global CallID */
@@ -985,7 +989,6 @@
 	struct sip_pkt *packets;		/*!< Packets scheduled for re-transmission */
 	struct sip_history_head *history;	/*!< History of this SIP dialog */
 	struct ast_variable *chanvars;		/*!< Channel variables to set for inbound call */
-	struct sip_pvt *next;			/*!< Next dialog in chain */
 	struct sip_invite_param *options;	/*!< Options for INVITE */
 	int autoframing;			/*!< The number of Asters we group in a Pyroflax
 							before strolling to the Grokyzpå
@@ -993,19 +996,9 @@
 							you know more) */
 };
 
-// #define	USE_AO2
 #ifdef	USE_AO2	/* astobj2 implementation */
 #include "asterisk/astobj2.h"
 ao2_container *dialogs;
-
-/* we never need to lock these */
-static void dialoglist_lock(void)
-{
-}
-
-static void dialoglist_unlock(void)
-{
-}
 
 #else	/* normal container */
 #define	CMP_MATCH	1
@@ -1641,12 +1634,20 @@
  */
 static void sip_pvt_lock(struct sip_pvt *pvt)
 {
+#ifdef USE_AO2
+	ao2_lock(pvt);
+#else
 	ast_mutex_lock(&pvt->pvt_lock);
+#endif
 }
 
 static void sip_pvt_unlock(struct sip_pvt *pvt)
 {
+#ifdef USE_AO2
+	ao2_unlock(pvt);
+#else
 	ast_mutex_unlock(&pvt->pvt_lock);
+#endif
 }
 
 /*!
@@ -3146,9 +3147,9 @@
 
 static struct sip_pvt *__sip_destroy(struct sip_pvt *p)
 {
-	ast_mutex_destroy(&p->pvt_lock);	/* XXX not used in ao2 */
 	pvt_unref(p);	/* automatically calls pvt_destructor on ao2*/
 #ifndef USE_AO2
+	ast_mutex_destroy(&p->pvt_lock);	/* XXX not used in ao2 */
 	pvt_destructor(p);
 	free(p);
 #endif
@@ -4346,7 +4347,9 @@
 	if (!p)
 		return NULL;
 
+#ifndef USE_AO2
 	ast_mutex_init(&p->pvt_lock);	/* XXX not necessary in ao2 */
+#endif
 
 	/* initialize fields so that __sip_destroy() can handle them */
 	p->method = intended_method;
@@ -4510,7 +4513,6 @@
  */
 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin, const int intended_method)
 {
-	static int profile_id = -1;
 	struct sip_pvt *p = NULL;
 	char totag[128];	/* not initialized, but not used if !pedantic */
 	char fromtag[128];	/* not initialized, but not used if !pedantic */
@@ -4549,9 +4551,6 @@
 			ast_log(LOG_DEBUG, "= Looking for  Call ID: %s (Checking %s) --From tag %s --To-tag %s  \n", callid, req->method==SIP_RESPONSE ? "To" : "From", fromtag, totag);
 	}
 
-	dialoglist_lock();
-	if (profile_id == -1)
-		profile_id = ast_add_profile("find_call", 0);
 #ifdef USE_AO2
 	p = ao2_callback(dialogs, 0 /* single, data */, find_call_cb, &arg);
 	if (p) {
@@ -4559,17 +4558,14 @@
 		return p;
 	}
 #else
-	ast_mark(profile_id, 1 /* start */);
+	dialoglist_lock();
 	for (p = dialoglist; p; p = p->next) {
 		if (find_call_cb(p, &arg, 0)) {
 			/* Found the call, lock p before unlocking the container */
-			ast_mark(profile_id, 0 /* stop */);
 			sip_pvt_lock(p);
 			break;
 		}
 	}
-	if (!p)
-		ast_mark(profile_id, 0 /* stop */);
 	dialoglist_unlock();
 	if (p)
 		return p;
@@ -8753,16 +8749,16 @@
 		ast_log(LOG_DEBUG, "Looking for callid %s (fromtag %s totag %s)\n", callid, fromtag ? fromtag : "<no fromtag>", totag ? totag : "<no totag>");
 
 	/* Search dialogs and find the match */
-	dialoglist_lock();
 #ifdef USE_AO2
 	sip_pvt_ptr = ao2_callback(dialogs, 0 /* single, data */, find_pvt_byid_cb, &arg);
 #else
+	dialoglist_lock();
 	for (sip_pvt_ptr = dialoglist; sip_pvt_ptr; sip_pvt_ptr = sip_pvt_ptr->next) {
 		if (find_pvt_byid_cb(sip_pvt_ptr, &arg, 0))
 			break;
 	}
+	dialoglist_unlock();
 #endif
-	dialoglist_unlock();
 	if (option_debug > 3 && !sip_pvt_ptr)
 		ast_log(LOG_DEBUG, "Found no match for callid %s to-tag %s from-tag %s\n", callid, totag, fromtag);
 	return sip_pvt_ptr;
@@ -10636,7 +10632,7 @@
 #define FORMAT3 "%-15.15s  %-10.10s  %-11.11s  %-15.15s  %-13.13s  %-15.15s %-10.10s\n"
 #define FORMAT2 "%-15.15s  %-10.10s  %-11.11s  %-11.11s  %-4.4s  %-7.7s  %-15.15s\n"
 #define FORMAT  "%-15.15s  %-10.10s  %-11.11s  %5.5d/%5.5d  %-4.4s  %-3.3s %-3.3s  %-15.15s %-10.10s\n"
-static int show_chanannels_cb(void *__cur, void *__arg, int flags)
+static int show_channels_cb(void *__cur, void *__arg, int flags)
 {
 	struct sip_pvt *cur = __cur;
 	struct __show_chan_arg *arg = __arg;
@@ -10685,16 +10681,16 @@
 		ast_cli(fd, FORMAT2, "Peer", "User/ANR", "Call ID", "Seq (Tx/Rx)", "Format", "Hold", "Last Message");
 	else 
 		ast_cli(fd, FORMAT3, "Peer", "User", "Call ID", "Extension", "Last state", "Type", "Mailbox");
-	dialoglist_lock();
 #ifdef USE_AO2
 	cur = NULL;	/* silence compiler */
-        ao2_callback(dialogs, OBJ_MULTIPLE|OBJ_NODATA, show_chanannels_cb, &arg);
+        ao2_callback(dialogs, OBJ_MULTIPLE|OBJ_NODATA, show_channels_cb, &arg);
 #else
+	dialoglist_lock();
 	for (cur = dialoglist; cur; cur = cur->next) {
-		show_chanannels_cb(cur, &arg, 0);
-	}
+		show_channels_cb(cur, &arg, 0);
+	}
+	dialoglist_unlock();
 #endif
-	dialoglist_unlock();
 	if (!subscriptions)
 		ast_cli(fd, "%d active SIP channel%s\n", arg.numchans, (arg.numchans != 1) ? "s" : "");
 	else
@@ -10932,7 +10928,6 @@
 	arg.str = argv[3];
 	arg.len = strlen(argv[3]);
 	arg.found = 0;
-	dialoglist_lock();
 #ifdef USE_AO2
     {
 	ao2_iterator i = ao2_iterator_init(dialogs, 0);
@@ -10942,11 +10937,12 @@
 	}
     }
 #else
+	dialoglist_lock();
 	for (cur = dialoglist; cur; cur = cur->next) {
 		show_channel_cb(cur, &arg);
 	}
+	dialoglist_unlock();
 #endif
-	dialoglist_unlock();
 	if (arg.found == 0) 
 		ast_cli(fd, "No such SIP Call ID starting with '%s'\n", argv[3]);
 	return RESULT_SUCCESS;
@@ -10988,7 +10984,6 @@
 	arg.str = argv[3];
 	arg.len = strlen(argv[3]);
 	arg.found = 0;
-	dialoglist_lock();
 #ifdef USE_AO2
     {
 	ao2_iterator i = ao2_iterator_init(dialogs, 0);
@@ -10998,11 +10993,12 @@
 	}
     }
 #else
+	dialoglist_lock();
 	for (cur = dialoglist; cur; cur = cur->next) {
 		show_history_cb(cur, &arg);
 	}
+	dialoglist_unlock();
 #endif
-	dialoglist_unlock();
 	if (!arg.found) 
 		ast_cli(fd, "No such SIP Call ID starting with '%s'\n", argv[3]);
 	return RESULT_SUCCESS;
@@ -14633,7 +14629,6 @@
 			for it to expire and send NOTIFY messages to the peer only to have them
 			ignored (or generate errors)
 			*/
-			dialoglist_lock();
 			{
 			struct sip_pvt *p_old;
 
@@ -14659,6 +14654,7 @@
 				ao2_ref(p_old, -1);
 			}
 #else
+			dialoglist_lock();
 			for (p_old = dialoglist; p_old; p_old = p_old->next) {
 				if (p_old == p)
 					continue;
@@ -14677,9 +14673,9 @@
 				}
 				sip_pvt_unlock(p_old);
 			}
+			dialoglist_unlock();
 #endif
 			}
-			dialoglist_unlock();
 		}
 		if (!p->expiry)
 			ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
@@ -15186,12 +15182,10 @@
 		*/
 		if (!fastrestart) {
 			struct sip_pvt *cur, *prev = NULL;
-			time_t t;
-			dialoglist_lock();
-			t = time(NULL);
+			time_t t = time(NULL);
 #ifdef USE_AO2
 	/* XXX should really use a callback here */
-	{
+			{
 			ao2_iterator i = ao2_iterator_init(dialogs, 0);
 
 			prev = NULL;	/* silence compiler */
@@ -15204,8 +15198,9 @@
 				sip_pvt_unlock(cur);
 				ao2_ref(cur, -1);
 			}
-	}
+			}
 #else
+			dialoglist_lock();
 			cur = dialoglist;
         		while (cur) {
 				sip_pvt_lock(cur);
@@ -15229,8 +15224,8 @@
 					cur = cur->next;
 				}
 			}
+			dialoglist_unlock();
 #endif
-			dialoglist_unlock();
 		}
 
 		pthread_testcancel();



More information about the svn-commits mailing list