<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Probably a memory leak when forcing opengl on windows</title>
		<link>http://www.allegro.cc/forums/view/613260</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 16 Sep 2013 11:53:00 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I used the same tutorial I use every time to check for allegro bugs:<br /><a href="http://wiki.allegro.cc/index.php?title=Basic_tutorial_on_loading_and_showing_images">http://wiki.allegro.cc/index.php?title=Basic_tutorial_on_loading_and_showing_images</a><br />But I added the line:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

right before creating the display. I checked with Memory Validator (<a href="http://www.softwareverify.com/cpp-memory.php">http://www.softwareverify.com/cpp-memory.php</a>) for leaks after program termination and I get 4 leaks at the end of the program, all of which have something to do with the following calls (I&#39;ll put the * marks around the line which memory validator complains about:</p><p>1. system.c
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">236</span>  <span class="k2">:</span>    <span class="c">/* Check for a user-defined system driver first */</span>
    <span class="n">237</span>  <span class="k2">:</span>    real_system <span class="k3">=</span> find_system<span class="k2">(</span><span class="k3">&amp;</span>_user_system_interfaces<span class="k2">)</span><span class="k2">;</span>
    <span class="n">238</span>  <span class="k2">:</span> 
    <span class="n">239</span>  <span class="k2">:</span>    <span class="c">/* If a user-defined driver is not found, look for a builtin one */</span>
    <span class="n">240</span>  <span class="k2">:</span>    <span class="k1">if</span> <span class="k2">(</span>real_system <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
    <span class="n">241</span>  <span class="k2">:</span>       <span class="k3">*</span>real_system <span class="k3">=</span> find_system<span class="k2">(</span><span class="k3">&amp;</span>_al_system_interfaces<span class="k2">)</span><span class="k2">;</span><span class="k3">*</span>
    <span class="n">242</span>  <span class="k2">:</span>    <span class="k2">}</span>
    <span class="n">243</span>  <span class="k2">:</span> 
    <span class="n">244</span>  <span class="k2">:</span>    <span class="k1">if</span> <span class="k2">(</span>real_system <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
    <span class="n">245</span>  <span class="k2">:</span>       active_sysdrv <span class="k3">=</span> NULL<span class="k2">;</span>
    <span class="n">246</span>  <span class="k2">:</span>       <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
</pre></div></div><p>
|<br />V<br />2. system.c
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">56</span>   <span class="k2">:</span>    <span class="k1">unsigned</span> <span class="k1">int</span> i<span class="k2">;</span>
    <span class="n">57</span>   <span class="k2">:</span> 
    <span class="n">58</span>   <span class="k2">:</span>    <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> vector-&gt;_size<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
    <span class="n">59</span>   <span class="k2">:</span>       sptr <span class="k3">=</span> _al_vector_ref<span class="k2">(</span>vector, i<span class="k2">)</span><span class="k2">;</span>
    <span class="n">60</span>   <span class="k2">:</span>       sys_interface <span class="k3">=</span> <span class="k3">*</span>sptr<span class="k2">;</span>
    <span class="n">61</span>   <span class="k2">:</span>       <span class="k3">*</span><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a> <span class="k3">=</span> sys_interface-&gt;initialize<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k3">*</span>
    <span class="n">62</span>   <span class="k2">:</span>          <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a><span class="k2">;</span>
    <span class="n">63</span>   <span class="k2">:</span>    <span class="k2">}</span>
    <span class="n">64</span>   <span class="k2">:</span> 
    <span class="n">65</span>   <span class="k2">:</span>    <span class="k1">return</span> NULL<span class="k2">;</span>
    <span class="n">66</span>   <span class="k2">:</span> <span class="k2">}</span>
</pre></div></div><p>
|<br />V<br />3. wsystem.c
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">167</span>  <span class="k2">:</span> 
    <span class="n">168</span>  <span class="k2">:</span>    _al_vector_init<span class="k2">(</span><span class="k3">&amp;</span>_al_win_system-&gt;system.displays, <span class="k1">sizeof</span> <span class="k2">(</span>ALLEGRO_SYSTEM_WIN <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    <span class="n">169</span>  <span class="k2">:</span> 
    <span class="n">170</span>  <span class="k2">:</span>    _al_win_system-&gt;system.vt <span class="k3">=</span> vt<span class="k2">;</span>
    <span class="n">171</span>  <span class="k2">:</span> 
    <span class="n">172</span>  <span class="k2">:</span>    <span class="k3">*</span>d3d_available <span class="k3">=</span> maybe_d3d_init_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k3">*</span>
    <span class="n">173</span>  <span class="k2">:</span> 
    <span class="n">174</span>  <span class="k2">:</span>    <span class="k1">return</span> <span class="k3">&amp;</span>_al_win_system-&gt;system<span class="k2">;</span>
    <span class="n">175</span>  <span class="k2">:</span> <span class="k2">}</span>
    <span class="n">176</span>  <span class="k2">:</span> 
    <span class="n">177</span>  <span class="k2">:</span>
</pre></div></div><p>
|<br />V<br />4. wsystem.c
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">141</span>  <span class="k2">:</span> 
    <span class="n">142</span>  <span class="k2">:</span> 
    <span class="n">143</span>  <span class="k2">:</span> <span class="k1">static</span> <span class="k1">bool</span> maybe_d3d_init_display<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
    <span class="n">144</span>  <span class="k2">:</span> <span class="k2">{</span>
    <span class="n">145</span>  <span class="k2">:</span> #ifdef ALLEGRO_CFG_D3D
    <span class="n">146</span>  <span class="k2">:</span>    <span class="k3">*</span><span class="k1">return</span> _al_d3d_init_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k3">*</span>
    <span class="n">147</span>  <span class="k2">:</span> #<span class="k1">else</span>
    <span class="n">148</span>  <span class="k2">:</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
    <span class="n">149</span>  <span class="k2">:</span> #endif
    <span class="n">150</span>  <span class="k2">:</span> <span class="k2">}</span>
    <span class="n">151</span>  <span class="k2">:</span>
</pre></div></div><p>
|<br />V<br />5. d3ddisp.cpp
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">694</span>  <span class="k2">:</span> 
    <span class="n">695</span>  <span class="k2">:</span> 
    <span class="n">696</span>  <span class="k2">:</span>    ALLEGRO_INFO<span class="k2">(</span><span class="s">"Render-to-texture: %d\n"</span>, render_to_texture_supported<span class="k2">)</span><span class="k2">;</span>
    <span class="n">697</span>  <span class="k2">:</span> 
    <span class="n">698</span>  <span class="k2">:</span>    present_mutex <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_mutex"><span class="a">al_create_mutex</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="n">699</span>  <span class="k2">:</span>    <span class="k3">*</span>_al_d3d_lost_device_mutex <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_mutex"><span class="a">al_create_mutex</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k3">*</span>
    <span class="n">700</span>  <span class="k2">:</span> 
    <span class="n">701</span>  <span class="k2">:</span>    _al_d3d_bmp_init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="n">702</span>  <span class="k2">:</span> 
    <span class="n">703</span>  <span class="k2">:</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
    <span class="n">704</span>  <span class="k2">:</span> <span class="k2">}</span>
</pre></div></div><p>
|<br />V<br />6. threads.c
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">281</span>  <span class="k2">:</span> <a href="http://www.allegro.cc/manual/ALLEGRO_MUTEX"><span class="a">ALLEGRO_MUTEX</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/al_create_mutex"><span class="a">al_create_mutex</span></a><span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
    <span class="n">282</span>  <span class="k2">:</span> <span class="k2">{</span>
    <span class="n">283</span>  <span class="k2">:</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_MUTEX"><span class="a">ALLEGRO_MUTEX</span></a> <span class="k3">*</span>mutex <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k3">*</span>mutex<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    <span class="n">284</span>  <span class="k2">:</span>    <span class="k1">if</span> <span class="k2">(</span>mutex<span class="k2">)</span> <span class="k2">{</span>
    <span class="n">285</span>  <span class="k2">:</span>       _AL_MARK_MUTEX_UNINITED<span class="k2">(</span>mutex-&gt;mutex<span class="k2">)</span><span class="k2">;</span>
    <span class="n">286</span>  <span class="k2">:</span>       <span class="k3">*</span>_al_mutex_init<span class="k2">(</span><span class="k3">&amp;</span>mutex-&gt;mutex<span class="k2">)</span><span class="k2">;</span><span class="k3">*</span>
    <span class="n">287</span>  <span class="k2">:</span>    <span class="k2">}</span>
    <span class="n">288</span>  <span class="k2">:</span>    <span class="k1">return</span> mutex<span class="k2">;</span>
    <span class="n">289</span>  <span class="k2">:</span> <span class="k2">}</span>
    <span class="n">290</span>  <span class="k2">:</span> 
    <span class="n">291</span>  <span class="k2">:</span>
</pre></div></div><p>
|<br />V<br />7. wxthread.c
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">97</span>   <span class="k2">:</span> <span class="k1">void</span> _al_mutex_init<span class="k2">(</span>_AL_MUTEX <span class="k3">*</span>mutex<span class="k2">)</span>
    <span class="n">98</span>   <span class="k2">:</span> <span class="k2">{</span>
    <span class="n">99</span>   <span class="k2">:</span>    <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>mutex<span class="k2">)</span><span class="k2">;</span>
    <span class="n">100</span>  <span class="k2">:</span> 
    <span class="n">101</span>  <span class="k2">:</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>mutex-&gt;cs<span class="k2">)</span>
    <span class="n">102</span>  <span class="k2">:</span>       <span class="k3">*</span>mutex-&gt;cs <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_malloc"><span class="a">al_malloc</span></a><span class="k2">(</span><span class="k1">sizeof</span> <span class="k3">*</span>mutex-&gt;cs<span class="k2">)</span><span class="k2">;</span><span class="k3">*</span>
    <span class="n">103</span>  <span class="k2">:</span>    <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>mutex-&gt;cs<span class="k2">)</span><span class="k2">;</span>
    <span class="n">104</span>  <span class="k2">:</span>    <span class="k1">if</span> <span class="k2">(</span>mutex-&gt;cs<span class="k2">)</span>
    <span class="n">105</span>  <span class="k2">:</span>       InitializeCriticalSection<span class="k2">(</span>mutex-&gt;cs<span class="k2">)</span><span class="k2">;</span>
    <span class="n">106</span>  <span class="k2">:</span>    <span class="k1">else</span>
    <span class="n">107</span>  <span class="k2">:</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_37.html" target="_blank">abort</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
|<br />V<br />8. memory.c
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="n">39</span>   <span class="k2">:</span>    <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a>, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>file, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>func<span class="k2">)</span>
    <span class="n">40</span>   <span class="k2">:</span> <span class="k2">{</span>
    <span class="n">41</span>   <span class="k2">:</span>    <span class="k1">if</span> <span class="k2">(</span>mem<span class="k2">)</span>
    <span class="n">42</span>   <span class="k2">:</span>       <span class="k1">return</span> mem-&gt;mi_malloc<span class="k2">(</span>n, <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a>, file, func<span class="k2">)</span><span class="k2">;</span>
    <span class="n">43</span>   <span class="k2">:</span>    <span class="k1">else</span>
    <span class="n">44</span>   <span class="k2">:</span>       <span class="k3">*</span><span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>n<span class="k2">)</span><span class="k2">;</span><span class="k3">*</span>
    <span class="n">45</span>   <span class="k2">:</span> <span class="k2">}</span>
    <span class="n">46</span>   <span class="k2">:</span> 
    <span class="n">47</span>   <span class="k2">:</span> 
    <span class="n">48</span>   <span class="k2">:</span> 
    <span class="n">49</span>   <span class="k2">:</span> <span class="c">/* Function: al_free_with_context</span>
</pre></div></div><p>

Then there are three more, which also have something to do with creating mutexes in <span class="source-code">_al_d3d_init_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Sun, 15 Sep 2013 06:34:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>fyi, the code tag comes with a bonus - if you put 3 asterisks after a line of code it will highlight that line of code for you, usually unless it chokes, but it does fine most the time.</p><p>Too bad it can&#39;t find the offending line of code that frees the mem that doesn&#39;t exist yet. Now then it would be a good memory tool.</p><p>Fix the leak! Submit a patch against git!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 15 Sep 2013 10:31:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Unfortunately, I&#39;m too noob of a programmer to do that myself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Mon, 16 Sep 2013 07:50:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why forcing an OpenGL Display should let Allegro Stakc the calls into the D3D submodule? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Mon, 16 Sep 2013 11:53:00 +0000</pubDate>
	</item>
</rss>
