<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Crash in al_set_target_bitmap</title>
		<link>http://www.allegro.cc/forums/view/615871</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 25 Nov 2015 00:46:02 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m having some difficulties debugging a crash in my ManyMouse project. For some reason it is crashing in al_set_target_bitmap. old_shader is usually 0xff0000ff or some other trash value, which would seem to indicate I&#39;m dealing with a display (or at least a shader) that has already been destroyed.</p><p>gdb doesn&#39;t work very well on Windows 10 (it hangs when the program crashes) so I&#39;ll debug it more when I get home and I can use my Vista machine.</p><div class="source-code snippet"><div class="inner"><pre><span class="n">0x6773616e</span> in <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a> <span class="k2">(</span>bitmap<span class="k3">=</span><span class="n">0x2a5fa78</span><span class="k2">)</span> at C:\mingw\LIBS\A5112release\allegro\src\tls.c:443
<span class="n">443</span>           old_shader-&gt;vt-&gt;unuse_shader<span class="k2">(</span>old_shader, old_display<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 12 Nov 2015 04:26:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If gdb does not work well, maybe it&#39;s because you made a total mess of the stack ^^<br />I would happily give it a go on linux. Wait: where is the code to debug ?</p><p><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 12 Nov 2015 16:13:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I removed a couple lines where I used <span class="source-code"><a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span><span class="k1">false</span><span class="k2">)</span></span>, and now once in a while I get a crash where an assertion fails in tls.c on line 403 :
</p><div class="source-code snippet"><div class="inner"><pre>   <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_bitmap_drawing_held"><span class="a">al_is_bitmap_drawing_held</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

What does that mean? I never hold bitmap drawing, so I don&#39;t know why it would be true.</p><p>I originally added those lines in because of this same crash, and it seemed to work.</p><p>@Gully<br />It&#39;s a windows only project at the moment, because it uses the RawInput API from the win32 code library.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 17 Nov 2015 04:09:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The font addon will change the target bitmap and also hold bitmap drawing (for example here <span class="ref"><sup>[<a href="#">1</a>]</sup></span>)... but as long as you only call font functions from the thread which does drawing operations there should be no problem. If you have several threads make sure only one can do font functions (this includes things like measuring the width of a string).
</p><div class="ref-block"><h2>References</h2><ol><li><a href="https://github.com/liballeg/allegro5/blob/5.1/addons/ttf/ttf.c#L582">https://github.com/liballeg/allegro5/blob/5.1/addons/ttf/ttf.c#L582</a></li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 17 Nov 2015 04:37:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I draw each window in its own window callback registered with allegro, so each window&#39;s drawing operation is running in its own thread, at least for my mouse &#39;windows&#39;. It&#39;s because I&#39;m using a DIB to draw the window transparently, something which I haven&#39;t figured out how to do with allegro yet. A mouse cursor can&#39;t just be a solid rectangle.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 17 Nov 2015 09:01:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hm, make sure each window has its own, separate set of bitmaps and fonts in that case. In theory Allegro can support shared contexts but there&#39;s probably a few places (like in the font addon) which can&#39;t deal with it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 17 Nov 2015 09:34:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, I fixed one crash where I was calling <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span></span>. I mixed that up with al_set_target_bitmap(NULL).</p><p>Edit<br />-------------------<br />Shouldn&#39;t <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>NULL<span class="k2">)</span></span> fail an assert or something? Or <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>NULL<span class="k2">)</span></span>?<br />-------------------</p><p>But I&#39;m still getting the original crash in <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a></span>. It is crashing on line 443 of tls.c :
</p><div class="source-code snippet"><div class="inner"><pre>      old_shader-&gt;vt-&gt;unuse_shader<span class="k2">(</span>old_shader, old_display<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
One time old_shader was 0xabababab, one time it was 0x1, and now I can&#39;t reproduce it at the moment. I think there is some uninitialized memory on the loose.</p><p>Okay, here&#39;s a log :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>Program received <a href="http://www.delorie.com/djgpp/doc/libc/libc_724.html" target="_blank">signal</a> SIGSEGV, Segmentation fault.
<span class="number">  2</span><span class="k2">[</span>Switching to Thread <span class="n">5496</span>.<span class="n">0x11e0</span><span class="k2">]</span>
<span class="number">  3</span><span class="n">0x6773616e</span> in <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a> <span class="k2">(</span>bitmap<span class="k3">=</span><span class="n">0x29db708</span><span class="k2">)</span> at C:\mingw\LIBS\A5112release\allegro\src\tls.c:443
<span class="number">  4</span><span class="n">443</span>           old_shader-&gt;vt-&gt;unuse_shader<span class="k2">(</span>old_shader, old_display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span><span class="k2">(</span>gdb<span class="k2">)</span> bt
<span class="number">  6</span><span class="p">#0  0x6773616e in al_set_target_bitmap (bitmap=0x29db708) at C:\mingw\LIBS\A5112release\allegro\src\tls.c:443</span>
<span class="number">  7</span><span class="p">#1  0x64884e7b in FCFSMouseStrategy::DrawPointers (this=0x22fa98, strategy_state=FCFS_STATE_PROCESSING_CLICK) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:237</span>
<span class="number">  8</span><span class="p">#2  0x648851c7 in FCFSMouseStrategy::SetFCFSStrategyState (this=0x22fa98, new_state=FCFS_STATE_PROCESSING_CLICK) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:293</span>
<span class="number">  9</span><span class="p">#3  0x64884907 in FCFSMouseStrategy::HandleInput (this=0x22fa98, input=..., process_input=true) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:158</span>
<span class="number"> 10</span><span class="p">#4  0x648847b4 in FCFSMouseStrategy::HandleInput (this=0x22fa98, input=...) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:124</span>
<span class="number"> 11</span><span class="p">#5  0x64883d75 in MouseController::HandleRawInput (this=0x22fa78, rawinput=...) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseController.cpp:155</span>
<span class="number"> 12</span><span class="p">#6  0x0040476d in _fu68___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:1403</span>
<span class="number"> 13</span><span class="p">#7  0x00404380 in _fu60___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:1205</span>
<span class="number"> 14</span><span class="p">#8  0x0040177a in _fu0___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:44</span>
<span class="number"> 15</span><span class="p">#9  0x677a45ba in window_callback (hWnd=0xa124a, message=255, wParam=0, lParam=-1984025671) at C:\mingw\LIBS\A5112release\allegro\src\win\wwindow.c:428</span>
<span class="number"> 16</span><span class="p">#10 0x7611f8d2 in USER32!GetMessageW () from C:\Windows\system32\user32.dll</span>
<span class="number"> 17</span><span class="p">#11 0x7611f794 in USER32!GetWindowLongW () from C:\Windows\system32\user32.dll</span>
<span class="number"> 18</span><span class="p">#12 0x677a43b3 in accept_mouse_event () at C:\mingw\LIBS\A5112release\allegro\src\win\wwindow.c:372</span>
<span class="number"> 19</span><span class="p">#13 0x000a124a in ?? ()</span>
<span class="number"> 20</span><span class="p">#14 0x000000ff in ?? ()</span>
<span class="number"> 21</span><span class="p">#15 0x00000000 in ?? ()</span>
<span class="number"> 22</span><span class="k2">(</span>gdb<span class="k2">)</span> bt <span class="n">1</span> full
<span class="number"> 23</span><span class="p">#0  0x6773616e in al_set_target_bitmap (bitmap=0x29db708) at C:\mingw\LIBS\A5112release\allegro\src\tls.c:443</span>
<span class="number"> 24</span>        tls <span class="k3">=</span> <span class="n">0x29e4440</span>
<span class="number"> 25</span>        old_display <span class="k3">=</span> <span class="n">0x29e0fe8</span>
<span class="number"> 26</span>        new_display <span class="k3">=</span> <span class="n">0x29e0fe8</span>
<span class="number"> 27</span>        old_shader <span class="k3">=</span> <span class="n">0x79d69c77</span>
<span class="number"> 28</span>        new_shader <span class="k3">=</span> <span class="n">0x0</span>
<span class="number"> 29</span>        same_shader <span class="k3">=</span> <span class="k1">false</span>
<span class="number"> 30</span>        bitmap_flags <span class="k3">=</span> <span class="n">4097</span>
<span class="number"> 31</span>        __func__ <span class="k3">=</span> <span class="s">"al_set_target_bitmap"</span>
<span class="number"> 32</span><span class="k2">(</span>More stack frames follow...<span class="k2">)</span>
<span class="number"> 33</span><span class="k2">(</span>gdb<span class="k2">)</span> p <span class="k3">*</span>old_shader
<div class="highlight"><span class="number"> 34</span>Cannot <a href="http://www.delorie.com/djgpp/doc/libc/libc_39.html" target="_blank">access</a> memory at address <span class="n">0x79d69c77</span></div><span class="number"> 35</span><span class="k2">(</span>gdb<span class="k2">)</span> quit
<span class="number"> 36</span>A debugging session is active.
<span class="number"> 37</span>
<span class="number"> 38</span>        Inferior <span class="n">1</span> <span class="k2">[</span>process <span class="n">5496</span><span class="k2">]</span> will be killed.
</div></div><p>

Here&#39;s another log (it shows the bitmap is valid I believe)
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>Program received <a href="http://www.delorie.com/djgpp/doc/libc/libc_724.html" target="_blank">signal</a> SIGSEGV, Segmentation fault.
<span class="number">  2</span><span class="k2">[</span>Switching to Thread <span class="n">5752</span>.<span class="n">0x123c</span><span class="k2">]</span>
<span class="number">  3</span><span class="n">0x6773616e</span> in <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a> <span class="k2">(</span>bitmap<span class="k3">=</span><span class="n">0x220b708</span><span class="k2">)</span> at C:\mingw\LIBS\A5112release\allegro\src\tls.c:443
<span class="number">  4</span><span class="n">443</span>           old_shader-&gt;vt-&gt;unuse_shader<span class="k2">(</span>old_shader, old_display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span><span class="k2">(</span>gdb<span class="k2">)</span> p <span class="k3">*</span>bitmap
<span class="number">  6</span>$<span class="n">1</span> <span class="k3">=</span> <span class="k2">{</span>vt <span class="k3">=</span> <span class="n">0x0</span>, _format <span class="k3">=</span> <span class="n">9</span>, _flags <span class="k3">=</span> <span class="n">4097</span>, _display <span class="k3">=</span> <span class="n">0x0</span>, _memory_format <span class="k3">=</span> <span class="n">0</span>, w <span class="k3">=</span> <span class="n">16</span>, h <span class="k3">=</span> <span class="n">24</span>, pitch <span class="k3">=</span> <span class="n">64</span>, cl <span class="k3">=</span> <span class="n">0</span>, cr_excl <span class="k3">=</span> <span class="n">16</span>, ct <span class="k3">=</span> <span class="n">0</span>, cb_excl <span class="k3">=</span> <span class="n">24</span>, locked <span class="k3">=</span> <span class="k1">false</span>, lock_x <span class="k3">=</span> <span class="n">0</span>, lock_y <span class="k3">=</span> <span class="n">0</span>, lock_w <span class="k3">=</span> <span class="n">16</span>, lock_h <span class="k3">=</span> <span class="n">24</span>, lock_data <span class="k3">=</span> <span class="n">0x2298358</span>, lock_flags <span class="k3">=</span> <span class="n">1</span>, locked_region <span class="k3">=</span> <span class="k2">{</span>data <span class="k3">=</span> <span class="n">0x2298358</span>, format <span class="k3">=</span> <span class="n">9</span>, pitch <span class="k3">=</span> <span class="n">64</span>, pixel_size <span class="k3">=</span> <span class="n">4</span><span class="k2">}</span>, transform <span class="k3">=</span> <span class="k2">{</span>m <span class="k3">=</span> <span class="k2">{</span><span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>,
<span class="number">  7</span>        <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">}</span><span class="k2">}</span><span class="k2">}</span>, inverse_transform <span class="k3">=</span> <span class="k2">{</span>m <span class="k3">=</span> <span class="k2">{</span><span class="k2">{</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">}</span><span class="k2">}</span><span class="k2">}</span>, inverse_transform_dirty <span class="k3">=</span> <span class="k1">true</span>, proj_transform <span class="k3">=</span> <span class="k2">{</span>m <span class="k3">=</span> <span class="k2">{</span><span class="k2">{</span><span class="n">0</span>.<span class="n">125</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>, <span class="k3">-</span><span class="n">0</span>.<span class="n">0833333358</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">}</span>, <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">}</span><span class="k2">}</span><span class="k2">}</span>, shader <span class="k3">=</span> <span class="n">0x0</span>, parent <span class="k3">=</span> <span class="n">0x0</span>, xofs <span class="k3">=</span> <span class="n">0</span>, yofs <span class="k3">=</span> <span class="n">0</span>, memory <span class="k3">=</span> <span class="n">0x2298358</span> <span class="s">""</span>, extra <span class="k3">=</span> <span class="n">0x0</span>, dirty <span class="k3">=</span> <span class="k1">true</span><span class="k2">}</span>
<span class="number">  8</span><span class="k2">(</span>gdb<span class="k2">)</span> p <span class="k3">*</span>old_shader
<span class="number">  9</span>Cannot <a href="http://www.delorie.com/djgpp/doc/libc/libc_39.html" target="_blank">access</a> memory at address <span class="n">0xff0000ff</span>
<span class="number"> 10</span><span class="k2">(</span>gdb<span class="k2">)</span> bt <span class="n">1</span> full
<span class="number"> 11</span><span class="p">#0  0x6773616e in al_set_target_bitmap (bitmap=0x220b708) at C:\mingw\LIBS\A5112release\allegro\src\tls.c:443</span>
<span class="number"> 12</span>        tls <span class="k3">=</span> <span class="n">0x2214440</span>
<span class="number"> 13</span>        old_display <span class="k3">=</span> <span class="n">0x2211b30</span>
<span class="number"> 14</span>        new_display <span class="k3">=</span> <span class="n">0x2211b30</span>
<span class="number"> 15</span>        old_shader <span class="k3">=</span> <span class="n">0xff0000ff</span>
<span class="number"> 16</span>        new_shader <span class="k3">=</span> <span class="n">0x0</span>
<span class="number"> 17</span>        same_shader <span class="k3">=</span> <span class="k1">false</span>
<span class="number"> 18</span>        bitmap_flags <span class="k3">=</span> <span class="n">4097</span>
<span class="number"> 19</span>        __func__ <span class="k3">=</span> <span class="s">"al_set_target_bitmap"</span>
<span class="number"> 20</span><span class="k2">(</span>More stack frames follow...<span class="k2">)</span>
<span class="number"> 21</span><span class="k2">(</span>gdb<span class="k2">)</span> bt
<span class="number"> 22</span><span class="p">#0  0x6773616e in al_set_target_bitmap (bitmap=0x220b708) at C:\mingw\LIBS\A5112release\allegro\src\tls.c:443</span>
<span class="number"> 23</span><span class="p">#1  0x64884e7b in FCFSMouseStrategy::DrawPointers (this=0x22fa98, strategy_state=FCFS_STATE_PROCESSING_CLICK) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:237</span>
<span class="number"> 24</span><span class="p">#2  0x648851c7 in FCFSMouseStrategy::SetFCFSStrategyState (this=0x22fa98, new_state=FCFS_STATE_PROCESSING_CLICK) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:293</span>
<span class="number"> 25</span><span class="p">#3  0x64884907 in FCFSMouseStrategy::HandleInput (this=0x22fa98, input=..., process_input=true) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:158</span>
<span class="number"> 26</span><span class="p">#4  0x648847b4 in FCFSMouseStrategy::HandleInput (this=0x22fa98, input=...) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategy.cpp:124</span>
<span class="number"> 27</span><span class="p">#5  0x64883d75 in MouseController::HandleRawInput (this=0x22fa78, rawinput=...) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseController.cpp:155</span>
<span class="number"> 28</span><span class="p">#6  0x0040476d in _fu68___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:1403</span>
<span class="number"> 29</span><span class="p">#7  0x00404380 in _fu60___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:1205</span>
<span class="number"> 30</span><span class="p">#8  0x0040177a in _fu0___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:44</span>
<span class="number"> 31</span><span class="p">#9  0x677a45ba in window_callback (hWnd=0x1a156c, message=255, wParam=0, lParam=10627997) at C:\mingw\LIBS\A5112release\allegro\src\win\wwindow.c:428</span>
<span class="number"> 32</span><span class="p">#10 0x7611f8d2 in USER32!GetMessageW () from C:\Windows\system32\user32.dll</span>
<span class="number"> 33</span><span class="p">#11 0x7611f794 in USER32!GetWindowLongW () from C:\Windows\system32\user32.dll</span>
<span class="number"> 34</span><span class="p">#12 0x677a43b3 in accept_mouse_event () at C:\mingw\LIBS\A5112release\allegro\src\win\wwindow.c:372</span>
<span class="number"> 35</span><span class="p">#13 0x001a156c in ?? ()</span>
<span class="number"> 36</span><span class="p">#14 0x000000ff in ?? ()</span>
<span class="number"> 37</span><span class="p">#15 0x00000000 in ?? ()</span>
<span class="number"> 38</span><span class="k2">(</span>gdb<span class="k2">)</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 18 Nov 2015 10:26:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you using al_use_shader anywhere? Are you ever destroying any shaders?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Wed, 18 Nov 2015 21:10:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, not directly anyway.</p><p>Edit<br />-----------------<br />Elias - I think that _al_d3d_destroy_bitmap is not resetting the tls-&gt;target_bitmap. It&#39;s setting d3d_display-&gt;target_bitmap to NULL, but it never touches the tls target bitmap. In my log I see that the bitmap that tls-&gt;target_bitmap refers to has been destroyed already in my code.</p><p><a href="https://github.com/liballeg/allegro5/blob/5.1/src/tls.c#L420">https://github.com/liballeg/allegro5/blob/5.1/src/tls.c#L420</a>
</p><div class="source-code"><div class="toolbar"><span class="name">tls.c</span><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 419</span>   <span class="k1">if</span> <span class="k2">(</span>tls-&gt;target_bitmap<span class="k2">)</span>
<span class="number"> 420</span>      old_shader <span class="k3">=</span> tls-&gt;target_bitmap-&gt;shader<span class="k2">;</span>
<span class="number"> 421</span>   <span class="k1">else</span>
<span class="number"> 422</span>      old_shader <span class="k3">=</span> NULL<span class="k2">;</span>
</div></div><p>



<a href="https://github.com/liballeg/allegro5/blob/5.1/src/win/d3d_disp.cpp#L2417">https://github.com/liballeg/allegro5/blob/5.1/src/win/d3d_disp.cpp#L2417</a>
</p><div class="source-code"><div class="toolbar"><span class="name">d3d_disp.cpp</span><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 2411</span><span class="k1">void</span> _al_d3d_destroy_bitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap<span class="k2">)</span>
<span class="number"> 2412</span><span class="k2">{</span>
<span class="number"> 2413</span>   <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_sub_bitmap"><span class="a">al_is_sub_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2414</span>   ALLEGRO_DISPLAY_D3D <span class="k3">*</span>d3d_display <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DISPLAY_D3D<span class="k3">*</span><span class="k2">)</span>_al_get_bitmap_display<span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2415</span>
<span class="number"> 2416</span>   <span class="k1">if</span> <span class="k2">(</span>bitmap <span class="k3">=</span><span class="k3">=</span> d3d_display-&gt;target_bitmap<span class="k2">)</span> <span class="k2">{</span>
<div class="highlight"><span class="number"> 2417</span>      d3d_display-&gt;target_bitmap <span class="k3">=</span> NULL<span class="k2">;</span></div><span class="number"> 2418</span>   <span class="k2">}</span>
<span class="number"> 2419</span>
<span class="number"> 2420</span>   ALLEGRO_BITMAP_EXTRA_D3D <span class="k3">*</span>d3d_bmp <span class="k3">=</span> get_extra<span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2421</span>
<span class="number"> 2422</span>   <span class="k1">if</span> <span class="k2">(</span>d3d_bmp-&gt;video_texture<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 2423</span>      <span class="k1">if</span> <span class="k2">(</span>d3d_bmp-&gt;video_texture-&gt;Release<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 2424</span>         ALLEGRO_WARN<span class="k2">(</span><span class="s">"d3d_destroy_bitmap: Release video texture failed.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2425</span>      <span class="k2">}</span>
<span class="number"> 2426</span>   <span class="k2">}</span>
<span class="number"> 2427</span>   <span class="k1">if</span> <span class="k2">(</span>d3d_bmp-&gt;system_texture<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 2428</span>      <span class="k1">if</span> <span class="k2">(</span>d3d_bmp-&gt;system_texture-&gt;Release<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 2429</span>         ALLEGRO_WARN<span class="k2">(</span><span class="s">"d3d_destroy_bitmap: Release system texture failed.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2430</span>      <span class="k2">}</span>
<span class="number"> 2431</span>   <span class="k2">}</span>
<span class="number"> 2432</span>
<span class="number"> 2433</span>   <span class="k1">if</span> <span class="k2">(</span>d3d_bmp-&gt;render_target<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 2434</span>      <span class="k1">if</span> <span class="k2">(</span>d3d_bmp-&gt;render_target-&gt;Release<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 2435</span>         ALLEGRO_WARN<span class="k2">(</span><span class="s">"d3d_destroy_bitmap: Release render target failed.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2436</span>      <span class="k2">}</span>
<span class="number"> 2437</span>   <span class="k2">}</span>
<span class="number"> 2438</span>
<span class="number"> 2439</span>   <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>bitmap-&gt;extra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2440</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 19 Nov 2015 04:12:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I see - but shouldn&#39;t this catch it? </p><p><a href="https://github.com/liballeg/allegro5/blob/5.1/src/bitmap.c#L207">https://github.com/liballeg/allegro5/blob/5.1/src/bitmap.c#L207</a></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">void</span> <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bitmap<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>      <span class="k1">return</span><span class="k2">;</span>
<span class="number">  5</span>   <span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span>   <span class="c">/* As a convenience, implicitly untarget the bitmap on the calling thread</span>
<span class="number">  8</span><span class="c">    * before it is destroyed, but maintain the current display.</span>
<span class="number">  9</span><span class="c">    */</span>
<span class="number"> 10</span>   <span class="k1">if</span> <span class="k2">(</span>bitmap <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>      <span class="k1">if</span> <span class="k2">(</span>display<span class="k2">)</span>
<span class="number"> 13</span>         <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>      <span class="k1">else</span>
<span class="number"> 15</span>         <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>   <span class="k2">}</span>
</div></div><p>

I think the only place which would normally call _al_d3d_destroy_bitmap would be al_destroy_bitmap. (And then probably from special occasions like destroying a display.) In the al_destroy_bitmap case it looks like the target bitmap is reset to the display backbuffer or NULL if there is no current display on the thread.</p><p>Sorry for not actually looking into making a patch - can&#39;t easily test here so just looking at the code.</p><p>Do you know if the wrong target bitmap is/was the display backbuffer of a deleted display and not a normal bitmap? Are you deleting any displays or bitmaps at all?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 19 Nov 2015 04:51:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Elias - if tls-&gt;current_display isn&#39;t reset, then running al_destroy_bitmap could reset the tls-&gt;target_bitmap to an already destroyed bitmap (namely the backbuffer in this case), by calling <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span>. But looking closer, it appears that case is handled in al_destroy_display, on lines 159-160 :
</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">if</span> <span class="k2">(</span>display <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> 
      _al_set_current_display_only<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 25 Nov 2015 00:46:02 +0000</pubDate>
	</item>
</rss>
