[asterisk-commits] rizzo: branch rizzo/astobj2 r47972 - /team/rizzo/astobj2/channels/chan_sip.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Thu Nov 23 10:56:32 MST 2006


Author: rizzo
Date: Thu Nov 23 11:56:32 2006
New Revision: 47972

URL: http://svn.digium.com/view/asterisk?view=rev&rev=47972
Log:
start profiling the path for incoming packets.


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=47972&r1=47971&r2=47972
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Thu Nov 23 11:56:32 2006
@@ -15190,10 +15190,11 @@
 	return res;
 }
 
-/*! \brief Read data from SIP socket
-\note sipsock_read locks the owner channel while we are processing the SIP message
-\return 1 on error, 0 on success
-\note Successful messages is connected to SIP call and forwarded to handle_request() 
+/*!
+ * Read data from SIP socket. Called from the do_monitor() thread in ast_io_wait()
+ * \return 1 on error, 0 on success
+ * \note sipsock_read locks the owner channel while we are processing the SIP message
+ * \note Successful messages is connected to SIP call and forwarded to handle_request() 
 */
 static int sipsock_read(int *id, int fd, short events, void *ignore)
 {
@@ -15206,15 +15207,25 @@
 	int recount = 0;
 	int lockretry;
 	int buflen = sizeof(req.data) - 1; /* leave an extra byte at the end for '\0' */
-
+	static int prof_memset = -1, prof_recv = -1, prof_parse = -1;
+
+	if (prof_memset == -1) {	/* allocate profiling counters */
+		prof_memset = ast_add_profile("sip_read-memset", 0);
+		prof_recv = ast_add_profile("sip_read-recvfrom", 0);
+		prof_parse = ast_add_profile("sip_read-parse", 0);
+	}
+	ast_mark(prof_memset, 1);
 	memset(&req, 0, sizeof(req));
+	ast_mark(prof_memset, 0);
 	/*
 	 * There is a short window during a reload when recvfrom
 	 * might fail because __sipsock is being closed and reopened.
 	 * Just live with it, it is not fatal, the network could have
 	 * dropped the packet anyways.
 	 */
+	ast_mark(prof_recv, 1);
 	res = recvfrom(__sipsock, req.data, buflen, 0, (struct sockaddr *)&sin, &len);
+	ast_mark(prof_recv, 0);
 	if (res < 0) {
 #if !defined(__FreeBSD__)
 		if (errno == EAGAIN)
@@ -15236,8 +15247,10 @@
 	if (ast_test_flag(&req, SIP_PKT_DEBUG))
 		ast_verbose("\n<--- SIP read from %s:%d --->\n%s\n<------------->\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), req.data);
 
+	ast_mark(prof_parse, 1);
 	parse_request(&req);
 	req.method = find_sip_method(req.rlPart1);
+	ast_mark(prof_parse, 0);
 
 	if (ast_test_flag(&req, SIP_PKT_DEBUG))
 		ast_verbose("--- (%d headers %d lines)%s ---\n", req.headers, req.lines, (req.headers + req.lines == 0) ? " Nat keepalive" : "");



More information about the asterisk-commits mailing list