<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://docs.yate.ro/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://docs.yate.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Important_Mutexes</id>
		<title>Important Mutexes - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://docs.yate.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Important_Mutexes"/>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;action=history"/>
		<updated>2026-04-28T05:01:16Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=7418&amp;oldid=prev</id>
		<title>Monica at 11:46, 4 November 2013</title>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=7418&amp;oldid=prev"/>
				<updated>2013-11-04T11:46:59Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 11:46, 4 November 2013&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*[[Mutexes and locking]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*[[Mutexes and locking]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*[[Locking Issues]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;*[[Locking Issues]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Programmers]] [[Category:Mutexes]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Monica</name></author>	</entry>

	<entry>
		<id>https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=2294&amp;oldid=prev</id>
		<title>Dana: /* MessageDispatcher (hidden) */</title>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=2294&amp;oldid=prev"/>
				<updated>2012-11-20T11:01:51Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;MessageDispatcher (hidden)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 11:01, 20 November 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The list holding the installed message handlers is protected against changes by this mutex while it's being iterated. Usually the only instance of dispatcher is the derived '''Engine''' singleton object.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The list holding the installed message handlers is protected against changes by this mutex while it's being iterated. Usually the only instance of dispatcher is the derived '''Engine''' singleton object.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''See also'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''See also'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dana</name></author>	</entry>

	<entry>
		<id>https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=2219&amp;oldid=prev</id>
		<title>Dana: /* RefObject::refMutex() (singleton, public) */</title>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=2219&amp;oldid=prev"/>
				<updated>2012-11-19T12:48:09Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;RefObject::refMutex() (singleton, public)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 12:48, 19 November 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== RefObject::refMutex() (singleton, public)===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== RefObject::refMutex() (singleton, public)===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/del&gt;the&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/del&gt;most important mutex in Yate, it locks '''RefObject''' derived objects while their reference counter is modified. It is acquired and released billions of times in any Yate run. The code executed with this mutex acquired is strictly limited and the actual object destruction (when the reference counter dropped to zero) is performed with this mutex released.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is the most important mutex in Yate, it locks '''RefObject''' derived objects while their reference counter is modified. It is acquired and released billions of times in any Yate run. The code executed with this mutex acquired is strictly limited and the actual object destruction (when the reference counter dropped to zero) is performed with this mutex released.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== DataEndpoint::commonMutex() (singleton, public)===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== DataEndpoint::commonMutex() (singleton, public)===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dana</name></author>	</entry>

	<entry>
		<id>https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=2218&amp;oldid=prev</id>
		<title>Dana: Created page with &quot; In the code of Yate there are some noteworthy mutexes that have program-wide implications.  === RefObject::refMutex() (singleton, public)===  This is '''the''' most important...&quot;</title>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=Important_Mutexes&amp;diff=2218&amp;oldid=prev"/>
				<updated>2012-11-19T12:47:13Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot; In the code of Yate there are some noteworthy mutexes that have program-wide implications.  === RefObject::refMutex() (singleton, public)===  This is &amp;#039;&amp;#039;&amp;#039;the&amp;#039;&amp;#039;&amp;#039; most important...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
In the code of Yate there are some noteworthy mutexes that have program-wide implications.&lt;br /&gt;
&lt;br /&gt;
=== RefObject::refMutex() (singleton, public)===&lt;br /&gt;
&lt;br /&gt;
This is '''the''' most important mutex in Yate, it locks '''RefObject''' derived objects while their reference counter is modified. It is acquired and released billions of times in any Yate run. The code executed with this mutex acquired is strictly limited and the actual object destruction (when the reference counter dropped to zero) is performed with this mutex released.&lt;br /&gt;
&lt;br /&gt;
=== DataEndpoint::commonMutex() (singleton, public)===&lt;br /&gt;
&lt;br /&gt;
This mutex protects data endpoint while their source and consumers are connected or disconnected. This makes sure that operations changing the data sources or consumers of data endpoints occur atomically.&lt;br /&gt;
&lt;br /&gt;
=== CallEndpoint::commonMutex() (singleton, public)===&lt;br /&gt;
&lt;br /&gt;
Call endpoint connect and disconnect operations are protected by this mutex.&lt;br /&gt;
&lt;br /&gt;
Please note that during the connect() or disconnect() methods usually there will be one or more calls that will need to acquire the '''DataEndpoint''' mutex.&lt;br /&gt;
&lt;br /&gt;
=== Module (itself, public) ===&lt;br /&gt;
&lt;br /&gt;
The module (and derived '''Driver''') class is derived from several classes including '''Mutex'''. Each module uses itself to perform atomic update operations.&lt;br /&gt;
&lt;br /&gt;
=== DataSource::mutex() (public)===&lt;br /&gt;
&lt;br /&gt;
Each DataSource has a mutex that is acquired while accessing its Consumer list.&lt;br /&gt;
&lt;br /&gt;
=== DataTranslator (singleton, hidden)===&lt;br /&gt;
&lt;br /&gt;
This mutex protects the list of translator factories while it's used or updated.&lt;br /&gt;
&lt;br /&gt;
=== MessageDispatcher (hidden)===&lt;br /&gt;
&lt;br /&gt;
The list holding the installed message handlers is protected against changes by this mutex while it's being iterated. Usually the only instance of dispatcher is the derived '''Engine''' singleton object.&lt;br /&gt;
&lt;br /&gt;
'''See also'''&lt;br /&gt;
&lt;br /&gt;
*[[Mutexes and locking]]&lt;br /&gt;
*[[Locking Issues]]&lt;/div&gt;</summary>
		<author><name>Dana</name></author>	</entry>

	</feed>