[asterisk-commits] dvossel: branch dvossel/fixtheworld_phase1_step3 r305125 - in /team/dvossel/f...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Jan 31 09:48:04 CST 2011


Author: dvossel
Date: Mon Jan 31 09:47:56 2011
New Revision: 305125

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=305125
Log:
fix merge error

Modified:
    team/dvossel/fixtheworld_phase1_step3/   (props changed)
    team/dvossel/fixtheworld_phase1_step3/.cleancount
    team/dvossel/fixtheworld_phase1_step3/apps/app_externalivr.c
    team/dvossel/fixtheworld_phase1_step3/apps/app_meetme.c
    team/dvossel/fixtheworld_phase1_step3/apps/app_queue.c
    team/dvossel/fixtheworld_phase1_step3/apps/app_voicemail.c
    team/dvossel/fixtheworld_phase1_step3/funcs/func_callcompletion.c
    team/dvossel/fixtheworld_phase1_step3/funcs/func_realtime.c
    team/dvossel/fixtheworld_phase1_step3/include/asterisk/lock.h
    team/dvossel/fixtheworld_phase1_step3/main/heap.c
    team/dvossel/fixtheworld_phase1_step3/main/http.c
    team/dvossel/fixtheworld_phase1_step3/main/lock.c
    team/dvossel/fixtheworld_phase1_step3/main/utils.c
    team/dvossel/fixtheworld_phase1_step3/res/res_calendar.c
    team/dvossel/fixtheworld_phase1_step3/res/res_config_ldap.c

Propchange: team/dvossel/fixtheworld_phase1_step3/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Propchange: team/dvossel/fixtheworld_phase1_step3/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jan 31 09:47:56 2011
@@ -1,1 +1,1 @@
-/trunk:1-304732
+/trunk:1-305124

Modified: team/dvossel/fixtheworld_phase1_step3/.cleancount
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/.cleancount?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/.cleancount (original)
+++ team/dvossel/fixtheworld_phase1_step3/.cleancount Mon Jan 31 09:47:56 2011
@@ -1,3 +1,3 @@
-38
+39
 
 

Modified: team/dvossel/fixtheworld_phase1_step3/apps/app_externalivr.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/apps/app_externalivr.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/apps/app_externalivr.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/apps/app_externalivr.c Mon Jan 31 09:47:56 2011
@@ -85,7 +85,7 @@
 			all DTMF events received on the channel, and notification if the channel is
 			hung up. The received on the channel, and notification if the channel is hung
 			up. The application will not be forcibly terminated when the channel is hung up.
-			See <filename>doc/externalivr.txt</filename> for a protocol specification.</para>
+			For more information see <filename>doc/asterisk.pdf</filename>.</para>
 		</description>
 	</application>
  ***/

Modified: team/dvossel/fixtheworld_phase1_step3/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/apps/app_meetme.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/apps/app_meetme.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/apps/app_meetme.c Mon Jan 31 09:47:56 2011
@@ -2210,7 +2210,6 @@
 static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struct ast_flags64 *confflags, char *optargs[])
 {
 	struct ast_conf_user *user = NULL;
-	struct ast_conf_user *usr = NULL;
 	int fd;
 	struct dahdi_confinfo dahdic, dahdic_empty;
 	struct ast_frame *f;
@@ -2690,10 +2689,8 @@
 	if (!ast_test_flag64(confflags, CONFFLAG_QUIET) && (ast_test_flag64(confflags, CONFFLAG_INTROUSER) ||
 			ast_test_flag64(confflags, CONFFLAG_INTROUSERNOREVIEW) || ast_test_flag64(confflags, CONFFLAG_INTROUSER_VMREC)) && conf->users > 1) {
 		struct announce_listitem *item;
-		if (!(item = ao2_alloc(sizeof(*item), NULL))) {
-			ret = -1;
+		if (!(item = ao2_alloc(sizeof(*item), NULL)))
 			goto outrun;
-		}
 		ast_copy_string(item->namerecloc, user->namerecloc, sizeof(item->namerecloc));
 		ast_copy_string(item->language, chan->language, sizeof(item->language));
 		item->confchan = conf->chan;
@@ -2873,6 +2870,11 @@
 			}
 
  			if (user->kicktime && (user->kicktime <= now.tv_sec)) {
+				if (ast_test_flag64(confflags, CONFFLAG_KICK_CONTINUE)) {
+					ret = 0;
+				} else {
+					ret = -1;
+				}
 				break;
 			}
   
@@ -2943,6 +2945,11 @@
 
 			now = ast_tvnow();
 			if (timeout && now.tv_sec >= timeout) {
+				if (ast_test_flag64(confflags, CONFFLAG_KICK_CONTINUE)) {
+					ret = 0;
+				} else {
+					ret = -1;
+				}
 				break;
 			}
 
@@ -3235,6 +3242,7 @@
 							int keepplaying;
 							int playednamerec;
 							struct ao2_iterator user_iter;
+							struct ast_conf_user *usr = NULL;
 							switch(dtmf) {
 							case '1': /* *81 Roll call */
 								keepplaying = 1;
@@ -3273,7 +3281,7 @@
 									}
 								}
 								user_iter = ao2_iterator_init(conf->usercontainer, 0);
-								while((user = ao2_iterator_next(&user_iter))) {
+								while((usr = ao2_iterator_next(&user_iter))) {
 									if (ast_fileexists(usr->namerecloc, NULL, NULL)) {
 										if (keepplaying && !ast_streamfile(chan, usr->namerecloc, chan->language)) {
 											res = ast_waitstream(chan, AST_DIGIT_ANY);
@@ -3283,7 +3291,7 @@
 										}
 										playednamerec = 1;
 									}
-									ao2_ref(user, -1);
+									ao2_ref(usr, -1);
 								}
 								ao2_iterator_destroy(&user_iter);
 								if (keepplaying && playednamerec && !ast_streamfile(chan, "conf-roll-callcomplete", chan->language)) {
@@ -3427,6 +3435,7 @@
 								break;
 							case '3': /* Eject last user */
 							{
+								struct ast_conf_user *usr = NULL;
 								int max_no = 0;
 								ao2_callback(conf->usercontainer, OBJ_NODATA, user_max_cmp, &max_no);
 								menu_active = 0;
@@ -3438,7 +3447,7 @@
 								} else {
 									usr->adminflags |= ADMINFLAG_KICKME;
 								}
-								ao2_ref(user, -1);
+								ao2_ref(usr, -1);
 								ast_stopstream(chan);
 								break;	
 							}
@@ -3743,10 +3752,8 @@
 
 	if (!ast_test_flag64(confflags, CONFFLAG_QUIET) && ast_test_flag64(confflags, CONFFLAG_INTROUSER |CONFFLAG_INTROUSERNOREVIEW | CONFFLAG_INTROUSER_VMREC) && conf->users > 1) {
 		struct announce_listitem *item;
-		if (!(item = ao2_alloc(sizeof(*item), NULL))) {
-			res = -1;
+		if (!(item = ao2_alloc(sizeof(*item), NULL)))
 			goto outrun;
-		}
 		ast_copy_string(item->namerecloc, user->namerecloc, sizeof(item->namerecloc));
 		ast_copy_string(item->language, chan->language, sizeof(item->language));
 		item->confchan = conf->chan;

Modified: team/dvossel/fixtheworld_phase1_step3/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/apps/app_queue.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/apps/app_queue.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/apps/app_queue.c Mon Jan 31 09:47:56 2011
@@ -238,14 +238,19 @@
 			</variablelist>
 		</description>
 		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
 			<ref type="application">AddQueueMember</ref>
 			<ref type="application">RemoveQueueMember</ref>
 			<ref type="application">PauseQueueMember</ref>
 			<ref type="application">UnpauseQueueMember</ref>
-			<ref type="application">AgentLogin</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
 			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
 			<ref type="function">QUEUE_MEMBER_LIST</ref>
-			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</application>
 	<application name="AddQueueMember" language="en_US">
@@ -274,10 +279,19 @@
 			</variablelist>
 		</description>
 		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
 			<ref type="application">RemoveQueueMember</ref>
 			<ref type="application">PauseQueueMember</ref>
 			<ref type="application">UnpauseQueueMember</ref>
-			<ref type="application">AgentLogin</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</application>
 	<application name="RemoveQueueMember" language="en_US">
@@ -303,9 +317,18 @@
 		</description>
 		<see-also>
 			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
 			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
 			<ref type="application">PauseQueueMember</ref>
 			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</application>
 	<application name="PauseQueueMember" language="en_US">
@@ -337,7 +360,19 @@
 			<para>Example: PauseQueueMember(,SIP/3000)</para>
 		</description>
 		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
 			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</application>
 	<application name="UnpauseQueueMember" language="en_US">
@@ -366,7 +401,19 @@
 			<para>Example: UnpauseQueueMember(,SIP/3000)</para>
 		</description>
 		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
 			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</application>
 	<application name="QueueLog" language="en_US">
@@ -386,6 +433,18 @@
 		</description>
 		<see-also>
 			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</application>
 	<function name="QUEUE_VARIABLES" language="en_US">
@@ -426,6 +485,21 @@
 			<para>Makes the following queue variables available.</para>
 			<para>Returns <literal>0</literal> if queue is found and setqueuevar is defined, <literal>-1</literal> otherwise.</para>
 		</description>
+		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
+		</see-also>
 	</function>
 	<function name="QUEUE_MEMBER" language="en_US">
 		<synopsis>
@@ -453,6 +527,21 @@
 		<description>
 			<para>Returns the number of members currently associated with the specified <replaceable>queuename</replaceable>.</para>
 		</description>
+		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
+		</see-also>
 	</function>
 	<function name="QUEUE_MEMBER_COUNT" language="en_US">
 		<synopsis>
@@ -466,7 +555,19 @@
 			<warning><para>This function has been deprecated in favor of the <literal>QUEUE_MEMBER()</literal> function</para></warning>
 		</description>
 		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
 			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</function>
 	<function name="QUEUE_EXISTS" language="en_US">
@@ -479,6 +580,21 @@
 		<description>
 			<para>Returns 1 if the specified queue exists, 0 if it does not</para>
 		</description>
+		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
+		</see-also>
 	</function>
 	<function name="QUEUE_WAITING_COUNT" language="en_US">
 		<synopsis>
@@ -490,6 +606,21 @@
 		<description>
 			<para>Returns the number of callers currently waiting in the specified <replaceable>queuename</replaceable>.</para>
 		</description>
+		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
+		</see-also>
 	</function>
 	<function name="QUEUE_MEMBER_LIST" language="en_US">
 		<synopsis>
@@ -502,7 +633,19 @@
 			<para>Returns a comma-separated list of members associated with the specified <replaceable>queuename</replaceable>.</para>
 		</description>
 		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
 			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
 		</see-also>
 	</function>
 	<function name="QUEUE_MEMBER_PENALTY" language="en_US">
@@ -516,6 +659,21 @@
 		<description>
 			<para>Gets or sets queue members penalty.</para>
 		</description>
+		<see-also>
+			<ref type="application">Queue</ref>
+			<ref type="application">QueueLog</ref>
+			<ref type="application">AddQueueMember</ref>
+			<ref type="application">RemoveQueueMember</ref>
+			<ref type="application">PauseQueueMember</ref>
+			<ref type="application">UnpauseQueueMember</ref>
+			<ref type="function">QUEUE_VARIABLES</ref>
+			<ref type="function">QUEUE_MEMBER</ref>
+			<ref type="function">QUEUE_MEMBER_COUNT</ref>
+			<ref type="function">QUEUE_EXISTS</ref>
+			<ref type="function">QUEUE_WAITING_COUNT</ref>
+			<ref type="function">QUEUE_MEMBER_LIST</ref>
+			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
+		</see-also>
 	</function>
 	<manager name="Queues" language="en_US">
 		<synopsis>

Modified: team/dvossel/fixtheworld_phase1_step3/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/apps/app_voicemail.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/apps/app_voicemail.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/apps/app_voicemail.c Mon Jan 31 09:47:56 2011
@@ -27,7 +27,7 @@
  *
  * \par See also
  * \arg \ref Config_vm
- * \note For information about voicemail IMAP storage, read doc/imapstorage.txt
+ * \note For information about voicemail IMAP storage, read doc/asterisk.pdf
  * \ingroup applications
  * \note This module requires res_adsi to load. This needs to be optional
  * during compilation.
@@ -6029,7 +6029,7 @@
 	return res;
 }
 
-#ifndef IMAP_STORAGE
+#if !defined(IMAP_STORAGE) && !defined(ODBC_STORAGE)
 static int resequence_mailbox(struct ast_vm_user *vmu, char *dir, int stopcount)
 {
     /* we know the actual number of messages, so stop process when number is hit */
@@ -7773,9 +7773,8 @@
 
 	if (last_msg < -1) {
 		return last_msg;
-	} 
 #ifndef ODBC_STORAGE
-	else if (vms->lastmsg != last_msg) {
+	} else if (vms->lastmsg != last_msg) {
 		ast_log(LOG_NOTICE, "Resequencing mailbox: %s, expected %d but found %d message(s) in box with max threshold of %d.\n", vms->curdir, last_msg + 1, vms->lastmsg + 1, vmu->maxmsg);
         resequence_mailbox(vmu, vms->curdir, count_msg);
 #endif

Modified: team/dvossel/fixtheworld_phase1_step3/funcs/func_callcompletion.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/funcs/func_callcompletion.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/funcs/func_callcompletion.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/funcs/func_callcompletion.c Mon Jan 31 09:47:56 2011
@@ -57,8 +57,8 @@
 			completion configuration parameter for a channel. Note that setting
 			a configuration parameter will only change the parameter for the
 			duration of the call.
-			
-			For more information on call completion in Asterisk, see <filename>doc/tex/ccss.tex</filename>.
+
+			For more information see <filename>doc/asterisk.pdf</filename>.
 			For more information on call completion parameters, see <filename>configs/ccss.conf.sample</filename>.</para>
 		</description>
 	</function>

Modified: team/dvossel/fixtheworld_phase1_step3/funcs/func_realtime.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/funcs/func_realtime.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/funcs/func_realtime.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/funcs/func_realtime.c Mon Jan 31 09:47:56 2011
@@ -67,6 +67,12 @@
 			If there is no match, NULL will be returned by the function.
 			On a write, this function will always return NULL.</para>
 		</description>
+		<see-also>
+			<ref type="function">REALTIME_STORE</ref>
+			<ref type="function">REALTIME_DESTROY</ref>
+			<ref type="function">REALTIME_FIELD</ref>
+			<ref type="function">REALTIME_HASH</ref>
+		</see-also>
 	</function>
 	<function name="REALTIME_STORE" language="en_US">
 		<synopsis>
@@ -84,6 +90,12 @@
 			creates channel variable named RTSTOREID, which contains value of unique ID.
 			Currently, a maximum of 30 field/value pairs is supported.</para>
 		</description>
+		<see-also>
+			<ref type="function">REALTIME</ref>
+			<ref type="function">REALTIME_DESTROY</ref>
+			<ref type="function">REALTIME_FIELD</ref>
+			<ref type="function">REALTIME_HASH</ref>
+		</see-also>
 	</function>
 	<function name="REALTIME_DESTROY" language="en_US">
 		<synopsis>
@@ -100,6 +112,12 @@
 			<para>This function acts in the same way as REALTIME(....) does, except that
 			it destroys the matched record in the RT engine.</para>
 		</description>
+		<see-also>
+			<ref type="function">REALTIME</ref>
+			<ref type="function">REALTIME_STORE</ref>
+			<ref type="function">REALTIME_FIELD</ref>
+			<ref type="function">REALTIME_HASH</ref>
+		</see-also>
 	</function>
 	<function name="REALTIME_FIELD" language="en_US">
 		<synopsis>
@@ -117,6 +135,12 @@
 			<replaceable>value</replaceable>.  When written to, the REALTIME_FIELD() function
 			performs identically to the REALTIME() function.</para>
 		</description>
+		<see-also>
+			<ref type="function">REALTIME</ref>
+			<ref type="function">REALTIME_STORE</ref>
+			<ref type="function">REALTIME_DESTROY</ref>
+			<ref type="function">REALTIME_HASH</ref>
+		</see-also>
 	</function>
 	<function name="REALTIME_HASH" language="en_US">
 		<synopsis>
@@ -134,6 +158,12 @@
 			it can be assigned to the HASH() function.  The HASH() function then provides
 			a suitable method for retrieving each field value of the record.</para>
 		</description>
+		<see-also>
+			<ref type="function">REALTIME</ref>
+			<ref type="function">REALTIME_STORE</ref>
+			<ref type="function">REALTIME_DESTROY</ref>
+			<ref type="function">REALTIME_FIELD</ref>
+		</see-also>
 	</function>
  ***/
 

Modified: team/dvossel/fixtheworld_phase1_step3/include/asterisk/lock.h
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/include/asterisk/lock.h?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/include/asterisk/lock.h (original)
+++ team/dvossel/fixtheworld_phase1_step3/include/asterisk/lock.h Mon Jan 31 09:47:56 2011
@@ -91,11 +91,11 @@
 #define AST_LOCK_TRACK_INIT_VALUE { { NULL }, { 0 }, 0, { NULL }, { 0 }, PTHREAD_MUTEX_INIT_VALUE }
 #endif
 
-#define AST_MUTEX_INIT_VALUE { AST_LOCK_TRACK_INIT_VALUE, 1, PTHREAD_MUTEX_INIT_VALUE }
-#define AST_MUTEX_INIT_VALUE_NOTRACKING { AST_LOCK_TRACK_INIT_VALUE, 0, PTHREAD_MUTEX_INIT_VALUE }
-
-#define AST_RWLOCK_INIT_VALUE { AST_LOCK_TRACK_INIT_VALUE, 1, __AST_RWLOCK_INIT_VALUE }
-#define AST_RWLOCK_INIT_VALUE_NOTRACKING { AST_LOCK_TRACK_INIT_VALUE, 0, __AST_RWLOCK_INIT_VALUE }
+#define AST_MUTEX_INIT_VALUE { PTHREAD_MUTEX_INIT_VALUE, NULL, 1 }
+#define AST_MUTEX_INIT_VALUE_NOTRACKING { PTHREAD_MUTEX_INIT_VALUE, NULL, 0 }
+
+#define AST_RWLOCK_INIT_VALUE { __AST_RWLOCK_INIT_VALUE, NULL, 1 }
+#define AST_RWLOCK_INIT_VALUE_NOTRACKING { __AST_RWLOCK_INIT_VALUE, NULL, 0 }
 
 #define AST_MAX_REENTRANCY 10
 
@@ -119,10 +119,10 @@
  * The information will just be ignored in the core if a module does not request it..
  */
 struct ast_mutex_info {
+	pthread_mutex_t mutex;
 	/*! Track which thread holds this mutex */
-	struct ast_lock_track track;
+	struct ast_lock_track *track;
 	unsigned int tracking:1;
-	pthread_mutex_t mutex;
 };
 
 /*! \brief Structure for rwlock and tracking information.
@@ -131,10 +131,10 @@
  * The information will just be ignored in the core if a module does not request it..
  */
 struct ast_rwlock_info {
+	pthread_rwlock_t lock;
 	/*! Track which thread holds this lock */
-	struct ast_lock_track track;
+	struct ast_lock_track *track;
 	unsigned int tracking:1;
-	pthread_rwlock_t lock;
 };
 
 typedef struct ast_mutex_info ast_mutex_t;
@@ -174,13 +174,13 @@
 
 int __ast_rwlock_init(int tracking, const char *filename, int lineno, const char *func, const char *rwlock_name, ast_rwlock_t *t);
 int __ast_rwlock_destroy(const char *filename, int lineno, const char *func, const char *rwlock_name, ast_rwlock_t *t);
-int __ast_rwlock_unlock(ast_rwlock_t *t, const char *name, const char *filename, int line, const char *func);
-int __ast_rwlock_rdlock(ast_rwlock_t *t, const char *name, const char *filename, int line, const char *func);
-int __ast_rwlock_wrlock(ast_rwlock_t *t, const char *name, const char *filename, int line, const char *func);
-int __ast_rwlock_timedrdlock(ast_rwlock_t *t, const char *name, const struct timespec *abs_timeout, const char *filename, int line, const char *func);
-int __ast_rwlock_timedwrlock(ast_rwlock_t *t, const char *name, const struct timespec *abs_timeout, const char *filename, int line, const char *func);
-int __ast_rwlock_tryrdlock(ast_rwlock_t *t, const char *name, const char *filename, int line, const char *func);
-int __ast_rwlock_trywrlock(ast_rwlock_t *t, const char *name, const char *filename, int line, const char *func);
+int __ast_rwlock_unlock(const char *filename, int lineno, const char *func, ast_rwlock_t *t, const char *name);
+int __ast_rwlock_rdlock(const char *filename, int lineno, const char *func, ast_rwlock_t *t, const char *name);
+int __ast_rwlock_wrlock(const char *filename, int lineno, const char *func, ast_rwlock_t *t, const char *name);
+int __ast_rwlock_timedrdlock(const char *filename, int lineno, const char *func, ast_rwlock_t *t, const char *name, const struct timespec *abs_timeout);
+int __ast_rwlock_timedwrlock(const char *filename, int lineno, const char *func, ast_rwlock_t *t, const char *name, const struct timespec *abs_timeout);
+int __ast_rwlock_tryrdlock(const char *filename, int lineno, const char *func, ast_rwlock_t *t, const char *name);
+int __ast_rwlock_trywrlock(const char *filename, int lineno, const char *func, ast_rwlock_t *t, const char *name);
 
 /*!
  * \brief wrapper for rwlock with tracking enabled
@@ -197,13 +197,13 @@
 #define ast_rwlock_init_notracking(rwlock) __ast_rwlock_init(0, __FILE__, __LINE__, __PRETTY_FUNCTION__, #rwlock, rwlock)
 
 #define ast_rwlock_destroy(rwlock)         __ast_rwlock_destroy(__FILE__, __LINE__, __PRETTY_FUNCTION__, #rwlock, rwlock)
-#define ast_rwlock_unlock(a)               __ast_rwlock_unlock(a, #a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
-#define ast_rwlock_rdlock(a)               __ast_rwlock_rdlock(a, #a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
-#define ast_rwlock_wrlock(a)               __ast_rwlock_wrlock(a, #a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
-#define ast_rwlock_tryrdlock(a)            __ast_rwlock_tryrdlock(a, #a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
-#define ast_rwlock_trywrlock(a)            __ast_rwlock_trywrlock(a, #a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
-#define ast_rwlock_timedrdlock(a, b)       __ast_rwlock_timedrdlock(a, #a, b, __FILE__, __LINE__, __PRETTY_FUNCTION__)
-#define ast_rwlock_timedwrlock(a, b)       __ast_rwlock_timedwrlock(a, #a, b, __FILE__, __LINE__, __PRETTY_FUNCTION__)
+#define ast_rwlock_unlock(a)               __ast_rwlock_unlock(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, #a)
+#define ast_rwlock_rdlock(a)               __ast_rwlock_rdlock(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, #a)
+#define ast_rwlock_wrlock(a)               __ast_rwlock_wrlock(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, #a)
+#define ast_rwlock_tryrdlock(a)            __ast_rwlock_tryrdlock(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, #a)
+#define ast_rwlock_trywrlock(a)            __ast_rwlock_trywrlock(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, #a)
+#define ast_rwlock_timedrdlock(a, b)       __ast_rwlock_timedrdlock(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, #a, b)
+#define ast_rwlock_timedwrlock(a, b)       __ast_rwlock_timedwrlock(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, #a, b)
 
 #define	ROFFSET	((lt->reentrancy > 0) ? (lt->reentrancy-1) : 0)
 
@@ -436,10 +436,15 @@
 	pthread_mutex_unlock(&lt->reentr_mutex);
 }
 
-static inline void ast_reentrancy_init(struct ast_lock_track *lt)
+static inline void ast_reentrancy_init(struct ast_lock_track **plt)
 {
 	int i;
 	pthread_mutexattr_t reentr_attr;
+	struct ast_lock_track *lt = *plt;
+
+	if (!lt) {
+		lt = *plt = (struct ast_lock_track *) calloc(1, sizeof(*lt));
+	}
 
 	for (i = 0; i < AST_MAX_REENTRANCY; i++) {
 		lt->file[i] = NULL;
@@ -459,9 +464,15 @@
 	pthread_mutexattr_destroy(&reentr_attr);
 }
 
-static inline void delete_reentrancy_cs(struct ast_lock_track *lt)
-{
-	pthread_mutex_destroy(&lt->reentr_mutex);
+static inline void delete_reentrancy_cs(struct ast_lock_track **plt)
+{
+	struct ast_lock_track *lt;
+	if (*plt) {
+		lt = *plt;
+		pthread_mutex_destroy(&lt->reentr_mutex);
+		free(lt);
+		*plt = NULL;
+	}
 }
 
 #else /* !DEBUG_THREADS */

Modified: team/dvossel/fixtheworld_phase1_step3/main/heap.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/main/heap.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/main/heap.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/main/heap.c Mon Jan 31 09:47:56 2011
@@ -308,15 +308,15 @@
 
 int __ast_heap_wrlock(struct ast_heap *h, const char *file, const char *func, int line)
 {
-	return __ast_rwlock_wrlock(&h->lock, "&h->lock", file, line, func);
+	return __ast_rwlock_wrlock(file, line, func, &h->lock, "&h->lock");
 }
 
 int __ast_heap_rdlock(struct ast_heap *h, const char *file, const char *func, int line)
 {
-	return __ast_rwlock_rdlock(&h->lock, "&h->lock", file, line, func);
+	return __ast_rwlock_rdlock(file, line, func, &h->lock, "&h->lock");
 }
 
 int __ast_heap_unlock(struct ast_heap *h, const char *file, const char *func, int line)
 {
-	return __ast_rwlock_unlock(&h->lock, "&h->lock", file, line, func);
-}
+	return __ast_rwlock_unlock(file, line, func, &h->lock, "&h->lock");
+}

Modified: team/dvossel/fixtheworld_phase1_step3/main/http.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/main/http.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/main/http.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/main/http.c Mon Jan 31 09:47:56 2011
@@ -110,6 +110,13 @@
 	{ "svg", "image/svg+xml" },
 	{ "svgz", "image/svg+xml" },
 	{ "gif", "image/gif" },
+	{ "html", "text/html" },
+	{ "htm", "text/html" },
+	{ "cnf", "text/plain" },
+	{ "cfg", "text/plain" },
+	{ "bin", "application/octet-stream" },
+	{ "sbn", "application/octet-stream" },
+	{ "ld", "application/octet-stream" },
 };
 
 struct http_uri_redirect {

Modified: team/dvossel/fixtheworld_phase1_step3/main/lock.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/fixtheworld_phase1_step3/main/lock.c?view=diff&rev=305125&r1=305124&r2=305125
==============================================================================
--- team/dvossel/fixtheworld_phase1_step3/main/lock.c (original)
+++ team/dvossel/fixtheworld_phase1_step3/main/lock.c Mon Jan 31 09:47:56 2011
@@ -62,7 +62,6 @@
 #endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
 
 	ast_reentrancy_init(&t->track);
-	t->tracking = tracking;
 #endif /* DEBUG_THREADS */
 
 	pthread_mutexattr_init(&attr);
@@ -96,7 +95,10 @@
 	}
 #endif
 
-	lt = &t->track;
+	if (t->tracking && !t->track) {
+		ast_reentrancy_init(&t->track);
+	}
+	lt = t->track;
 
 	res = pthread_mutex_trylock(&t->mutex);
 	switch (res) {
@@ -110,13 +112,15 @@
 	case EBUSY:
 		__ast_mutex_logger("%s line %d (%s): Error: attempt to destroy locked mutex '%s'.\n",
 				   filename, lineno, func, mutex_name);
-		ast_reentrancy_lock(lt);
-		__ast_mutex_logger("%s line %d (%s): Error: '%s' was locked here.\n",
-			    lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name);
-#ifdef HAVE_BKTR
-		__dump_backtrace(&lt->backtrace[ROFFSET], canlog);
-#endif
-		ast_reentrancy_unlock(lt);
+		if (t->tracking) {
+			ast_reentrancy_lock(lt);
+			__ast_mutex_logger("%s line %d (%s): Error: '%s' was locked here.\n",
+				    lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name);
+#ifdef HAVE_BKTR
+			__dump_backtrace(&lt->backtrace[ROFFSET], canlog);
+#endif
+			ast_reentrancy_unlock(lt);
+		}
 		break;
 	}
 #endif /* DEBUG_THREADS */
@@ -128,17 +132,19 @@
 		__ast_mutex_logger("%s line %d (%s): Error destroying mutex %s: %s\n",
 				   filename, lineno, func, mutex_name, strerror(res));
 	}
-	ast_reentrancy_lock(lt);
-	lt->file[0] = filename;
-	lt->lineno[0] = lineno;
-	lt->func[0] = func;
-	lt->reentrancy = 0;
-	lt->thread[0] = 0;
-#ifdef HAVE_BKTR
-	memset(&lt->backtrace[0], 0, sizeof(lt->backtrace[0]));
-#endif
-	ast_reentrancy_unlock(lt);
-	delete_reentrancy_cs(lt);
+	if (t->tracking) {
+		ast_reentrancy_lock(lt);
+		lt->file[0] = filename;
+		lt->lineno[0] = lineno;
+		lt->func[0] = func;
+		lt->reentrancy = 0;
+		lt->thread[0] = 0;
+#ifdef HAVE_BKTR
+		memset(&lt->backtrace[0], 0, sizeof(lt->backtrace[0]));
+#endif
+		ast_reentrancy_unlock(lt);
+		delete_reentrancy_cs(&t->track);
+	}
 #endif /* DEBUG_THREADS */
 
 	return res;
@@ -150,7 +156,7 @@
 	int res;
 
 #ifdef DEBUG_THREADS
-	struct ast_lock_track *lt = &t->track;
+	struct ast_lock_track *lt;
 	int canlog = strcmp(filename, "logger.c") & t->tracking;
 #ifdef HAVE_BKTR
 	struct ast_bt *bt = NULL;
@@ -171,6 +177,11 @@
 	}
 #endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
 
+	if (t->tracking && !t->track) {
+		ast_reentrancy_init(&t->track);
+	}
+	lt = t->track;
+
 	if (t->tracking) {
 #ifdef HAVE_BKTR
 		ast_reentrancy_lock(lt);
@@ -231,7 +242,7 @@
 #endif /* !DETECT_DEADLOCKS || !DEBUG_THREADS */
 
 #ifdef DEBUG_THREADS
-	if (!res) {
+	if (t->tracking && !res) {
 		ast_reentrancy_lock(lt);
 		if (lt->reentrancy < AST_MAX_REENTRANCY) {
 			lt->file[lt->reentrancy] = filename;
@@ -247,7 +258,7 @@
 		if (t->tracking) {
 			ast_mark_lock_acquired(t);
 		}
-	} else {
+	} else if (t->tracking) {
 #ifdef HAVE_BKTR
 		if (lt->reentrancy) {
 			ast_reentrancy_lock(lt);
@@ -256,14 +267,12 @@
 		} else {
 			bt = NULL;
 		}
-		if (t->tracking) {
-			ast_remove_lock_info(t, bt);
-		}
-#else
-		if (t->tracking) {
-			ast_remove_lock_info(t);
-		}
-#endif
+		ast_remove_lock_info(t, bt);
+#else
+		ast_remove_lock_info(t);
+#endif
+	}
+	if (res) {
 		__ast_mutex_logger("%s line %d (%s): Error obtaining mutex: %s\n",
 				   filename, lineno, func, strerror(res));
 		DO_THREAD_CRASH;
@@ -279,7 +288,7 @@
 	int res;
 
 #ifdef DEBUG_THREADS
-	struct ast_lock_track *lt= &t->track;
+	struct ast_lock_track *lt;
 	int canlog = strcmp(filename, "logger.c") & t->tracking;
 #ifdef HAVE_BKTR
 	struct ast_bt *bt = NULL;
@@ -300,6 +309,11 @@
 	}
 #endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
 
+	if (t->tracking && !t->track) {
+		ast_reentrancy_init(&t->track);
+	}
+	lt = t->track;
+
 	if (t->tracking) {
 #ifdef HAVE_BKTR
 		ast_reentrancy_lock(lt);
@@ -318,7 +332,7 @@
 	res = pthread_mutex_trylock(&t->mutex);
 
 #ifdef DEBUG_THREADS
-	if (!res) {
+	if (t->tracking && !res) {
 		ast_reentrancy_lock(lt);
 		if (lt->reentrancy < AST_MAX_REENTRANCY) {
 			lt->file[lt->reentrancy] = filename;
@@ -348,7 +362,7 @@
 	int res;
 
 #ifdef DEBUG_THREADS
-	struct ast_lock_track *lt = &t->track;
+	struct ast_lock_track *lt;
 	int canlog = strcmp(filename, "logger.c") & t->tracking;
 #ifdef HAVE_BKTR
 	struct ast_bt *bt = NULL;
@@ -367,39 +381,44 @@
 	}
 #endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
 
-	ast_reentrancy_lock(lt);
-	if (lt->reentrancy && (lt->thread[ROFFSET] != pthread_self())) {
-		__ast_mutex_logger("%s line %d (%s): attempted unlock mutex '%s' without owning it!\n",
-				   filename, lineno, func, mutex_name);
-		__ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n",
-				   lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name);
-#ifdef HAVE_BKTR
-		__dump_backtrace(&lt->backtrace[ROFFSET], canlog);
-#endif
-		DO_THREAD_CRASH;
-	}
-
-	if (--lt->reentrancy < 0) {
-		__ast_mutex_logger("%s line %d (%s): mutex '%s' freed more times than we've locked!\n",
-				   filename, lineno, func, mutex_name);
-		lt->reentrancy = 0;
-	}
-
-	if (lt->reentrancy < AST_MAX_REENTRANCY) {
-		lt->file[lt->reentrancy] = NULL;
-		lt->lineno[lt->reentrancy] = 0;
-		lt->func[lt->reentrancy] = NULL;
-		lt->thread[lt->reentrancy] = 0;
-	}
-
-#ifdef HAVE_BKTR
-	if (lt->reentrancy) {
-		bt = &lt->backtrace[lt->reentrancy - 1];
-	}
-#endif
-	ast_reentrancy_unlock(lt);
+	if (t->tracking && !t->track) {
+		ast_reentrancy_init(&t->track);
+	}
+	lt = t->track;
 
 	if (t->tracking) {
+		ast_reentrancy_lock(lt);
+		if (lt->reentrancy && (lt->thread[ROFFSET] != pthread_self())) {
+			__ast_mutex_logger("%s line %d (%s): attempted unlock mutex '%s' without owning it!\n",
+					   filename, lineno, func, mutex_name);
+			__ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n",
+					   lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name);
+#ifdef HAVE_BKTR
+			__dump_backtrace(&lt->backtrace[ROFFSET], canlog);
+#endif
+			DO_THREAD_CRASH;
+		}
+
+		if (--lt->reentrancy < 0) {
+			__ast_mutex_logger("%s line %d (%s): mutex '%s' freed more times than we've locked!\n",
+					   filename, lineno, func, mutex_name);
+			lt->reentrancy = 0;
+		}
+
+		if (lt->reentrancy < AST_MAX_REENTRANCY) {
+			lt->file[lt->reentrancy] = NULL;
+			lt->lineno[lt->reentrancy] = 0;
+			lt->func[lt->reentrancy] = NULL;
+			lt->thread[lt->reentrancy] = 0;
+		}
+
+#ifdef HAVE_BKTR
+		if (lt->reentrancy) {
+			bt = &lt->backtrace[lt->reentrancy - 1];
+		}
+#endif
+		ast_reentrancy_unlock(lt);
+
 #ifdef HAVE_BKTR
 		ast_remove_lock_info(t, bt);
 #else
@@ -453,7 +472,7 @@
 	int res;
 
 #ifdef DEBUG_THREADS
-	struct ast_lock_track *lt= &t->track;
+	struct ast_lock_track *lt;
 	int canlog = strcmp(filename, "logger.c") & t->tracking;
 #ifdef HAVE_BKTR
 	struct ast_bt *bt = NULL;
@@ -472,39 +491,44 @@
 	}
 #endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
 
-	ast_reentrancy_lock(lt);
-	if (lt->reentrancy && (lt->thread[ROFFSET] != pthread_self())) {
-		__ast_mutex_logger("%s line %d (%s): attempted unlock mutex '%s' without owning it!\n",
+	if (t->tracking && !t->track) {

[... 919 lines stripped ...]



More information about the asterisk-commits mailing list