<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>al_get_target_bitmap returning a destroyed bitmap</title>
		<link>http://www.allegro.cc/forums/view/615914</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 10 Dec 2015 18:02:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is a continuation of an older thread that got locked (<a href="https://www.allegro.cc/forums/thread/615871">https://www.allegro.cc/forums/thread/615871</a>).</p><p>I am still trying to debug a crash in my ManyMouse project where it crashes in al_hold_bitmap_drawing(false). I am using <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 class="k2">;</span></span> because before my code was crashing on a failed assert when Allegro calls <span class="source-code"><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>. When I don&#39;t call al_hold_bitmap_drawing(false) though, it crashes on al_set_target_bitmap (but not reliably).</p><p>Here is a backtrace :
</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="number">   2</span>c:\Research\RawInput\RainDropMouse\ManyMouse\cbbuild\bin&gt;gdb RawDebug.exe
<span class="number">   3</span>GNU gdb <span class="k2">(</span>GDB<span class="k2">)</span> <span class="n">7</span>.<span class="n">6</span>.<span class="n">1</span>
<span class="number">   4</span>Copyright <span class="k2">(</span>C<span class="k2">)</span> <span class="n">2013</span> Free Software Foundation, Inc.
<span class="number">   5</span>License GPLv3<span class="k3">+</span><span class="k2">:</span> GNU GPL version <span class="n">3</span> <span class="k1">or</span> later <span class="k3">&lt;</span>http:<span class="c">//gnu.org/licenses/gpl.html&gt;</span>
<span class="number">   6</span>This is <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a> software: you are <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a> to change <span class="k1">and</span> redistribute it.
<span class="number">   7</span>There is NO WARRANTY, to the extent permitted by law.  Type <span class="s">"show copying"</span>
<span class="number">   8</span><span class="k1">and</span> <span class="s">"show warranty"</span> <span class="k1">for</span> details.
<span class="number">   9</span>This GDB was configured as <span class="s">"mingw32"</span>.
<span class="number">  10</span>For bug reporting instructions, please see:
<span class="number">  11</span><span class="k3">&lt;</span>http:<span class="c">//www.gnu.org/software/gdb/bugs/&gt;...</span>
<span class="number">  12</span>Reading symbols from c:\Research\RawInput\RainDropMouse\ManyMouse\cbbuild\bin\RawDebug.exe...done.
<span class="number">  13</span><span class="k2">(</span>gdb<span class="k2">)</span> run
<span class="number">  14</span>Starting program: c:\Research\RawInput\RainDropMouse\ManyMouse\cbbuild\bin<span class="k3">/</span>RawDebug.exe
<span class="number">  15</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x1680</span><span class="k2">]</span>
<span class="number">  16</span>Thread ID of main function is <span class="n">0x00001680</span>
<span class="number">  17</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0xafc</span><span class="k2">]</span>
<span class="number">  18</span>CreateAllegroBitmap  <span class="k2">:</span> Created <span class="n">16</span> X <span class="n">24</span> allegro bitmap fcfs_mouse_buffer at <span class="n">0028f140</span> on thread <span class="n">5760</span> attached to display <span class="n">00000000</span>
<span class="number">  19</span>Hook dll loaded successfully
<span class="number">  20</span>LowLevelMouseHook loaded successfully.
<span class="number">  21</span>MouseHook loaded successfully.
<span class="number">  22</span>StartMouse loaded successfully.
<span class="number">  23</span>StopMouse loaded successfully.
<span class="number">  24</span>SetWindowsHookEx<span class="k2">(</span>WH_MOUSE_LL<span class="k2">)</span> succeeded.
<span class="number">  25</span>SetWindowsHookEx<span class="k2">(</span>WH_MOUSE<span class="k2">)</span> succeeded.
<span class="number">  26</span>ShellHook loaded successfully
<span class="number">  27</span>SetWindowsHookEx<span class="k2">(</span>WH_SHELL<span class="k2">)</span> succeeded
<span class="number">  28</span>log.InitMutex<span class="k2">(</span><span class="k2">)</span> returned <span class="k1">true</span>
<span class="number">  29</span>InitTree<span class="k2">(</span><span class="k2">)</span> returned <span class="k1">true</span>
<span class="number">  30</span>BFD: C:\Windows\system32\atiumdva.dll: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section .text
<span class="number">  31</span>BFD: C:\Windows\system32\atiumdva.dll: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section .rdata
<span class="number">  32</span>BFD: C:\Windows\system32\atiumdva.dll: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section .data
<span class="number">  33</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x1320</span><span class="k2">]</span>
<span class="number">  34</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x1764</span><span class="k2">]</span>
<span class="number">  35</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x6ec</span><span class="k2">]</span>
<span class="number">  36</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0xf6c</span><span class="k2">]</span>
<span class="number">  37</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0xd08</span><span class="k2">]</span>
<span class="number">  38</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x11e0</span><span class="k2">]</span>
<span class="number">  39</span>CreateAllegroDisplay <span class="k2">:</span> Created <span class="n">640</span> X <span class="n">400</span> allegro display RawInputHandler::display at <span class="n">029f1b68</span> on thread <span class="n">5760</span> with backbuffer <span class="n">029f1dc0</span>
<span class="number">  40</span>CreateAllegroBitmap  <span class="k2">:</span> Created <span class="n">1280</span> X <span class="n">800</span> allegro bitmap RawInputHandler::allegro_buffer at <span class="n">029f8cb8</span> on thread <span class="n">5760</span> attached to display <span class="n">029f1b68</span>
<span class="number">  41</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x844</span><span class="k2">]</span>
<span class="number">  42</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x143c</span><span class="k2">]</span>
<span class="number">  43</span><span class="k2">[</span>New Thread <span class="n">1024</span>.<span class="n">0x1110</span><span class="k2">]</span>
<span class="number">  44</span>CreateAllegroDisplay <span class="k2">:</span> Created <span class="n">1024</span> X <span class="n">300</span> allegro display RawInputHandler::log_display at <span class="n">029f96e0</span> on thread <span class="n">5760</span> with backbuffer <span class="n">029f9938</span>
<span class="number">  45</span>Images loaded successfully
<span class="number">  46</span>Couldn<span class="s">'t set WS_EX_LAYERED style attribute</span>
<span class="number">  47</span><span class="s">Thread ID of callback process is 0x00001320</span>
<span class="number">  48</span><span class="s">WindowHandler::EnumerateWindows After EnumerateTree</span>
<span class="number">  49</span><span class="s">Desktop window handle = 00010010</span>
<span class="number">  50</span><span class="s">Shell   window handle = 000200e8</span>
<span class="number">  51</span><span class="s">Taskbar window handle = 00010054</span>
<span class="number">  52</span><span class="s">Num raw input devices detected = 13</span>
<span class="number">  53</span><span class="s">InitRawInfo was successful</span>
<span class="number">  54</span><span class="s">RegisterDevices was successful</span>
<span class="number">  55</span><span class="s">[New Thread 1024.0x133c]</span>
<span class="number">  56</span><span class="s">Adding mouse device #1</span>
<span class="number">  57</span><span class="s">[New Thread 1024.0x16a8]</span>
<span class="number">  58</span><span class="s">[New Thread 1024.0x11cc]</span>
<span class="number">  59</span><span class="s">[New Thread 1024.0x10b8]</span>
<span class="number">  60</span><span class="s">[New Thread 1024.0xd48]</span>
<span class="number">  61</span><span class="s">Adding mouse device #2</span>
<span class="number">  62</span><span class="s">[New Thread 1024.0x14a0]</span>
<span class="number">  63</span><span class="s">[New Thread 1024.0x10f0]</span>
<span class="number">  64</span><span class="s">[New Thread 1024.0x438]</span>
<span class="number">  65</span><span class="s">[New Thread 1024.0x1398]</span>
<span class="number">  66</span><span class="s">FCFS DrawPointers : Setting image for mouse device #1</span>
<span class="number">  67</span><span class="s">[New Thread 1024.0x938]</span>
<span class="number">  68</span><span class="s">[New Thread 1024.0x17f8]</span>
<span class="number">  69</span><span class="s">[New Thread 1024.0x1418]</span>
<span class="number">  70</span><span class="s">[New Thread 1024.0x11d8]</span>
<span class="number">  71</span><span class="s">FCFS DrawPointers : Setting image for mouse device #2</span>
<span class="number">  72</span><span class="s">[New Thread 1024.0x13e4]</span>
<span class="number">  73</span><span class="s">[New Thread 1024.0xe40]</span>
<span class="number">  74</span><span class="s">[New Thread 1024.0x17e4]</span>
<span class="number">  75</span><span class="s">[New Thread 1024.0x1424]</span>
<span class="number">  76</span><span class="s"></span>
<span class="number">  77</span><span class="s">Program received signal SIGSEGV, Segmentation fault.</span>
<span class="number">  78</span><span class="s">[Switching to Thread 1024.0x1320]</span>
<span class="number">  79</span><span class="s">0x67720969 in al_hold_bitmap_drawing (hold=false) at C:\mingw\LIBS\A5112release\allegro\src\display.c:520</span>
<span class="number">  80</span><span class="s">520              current_display-&gt;vt-&gt;flush_vertex_cache(current_display);</span>
<span class="number">  81</span><span class="s">(gdb) bt</span>
<span class="number">  82</span><span class="s">#0  0x67720969 in al_hold_bitmap_drawing (hold=false) at C:\mingw\LIBS\A5112release\allegro\src\display.c:520</span>
<span class="number">  83</span><span class="s">#1  0x648823aa in AllegroSetTargetBitmap (bmp=0x2ac5d88, name=0x648a2194 &lt;MouseController::SetMouseStrategy(MOUSE_STRATEGY)::__func__+1173&gt; "fcfs_mouse_buffer") at C:\Research\RawInput\RainDropMouse\ManyMouse\src\AllegroAndWindows.cpp:517</span>
<span class="number">  84</span><span class="s">#2  0x648855cd in FCFSMouseStrategy::DrawPointers (this=0x22fa98, strategy_state=FCFS_STATE_PROCESSING_CLICK) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategyFCFS.cpp:159</span>
<span class="number">  85</span><span class="s">#3  0x64885929 in FCFSMouseStrategy::SetFCFSStrategyState (this=0x22fa98, new_state=FCFS_STATE_PROCESSING_CLICK) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategyFCFS.cpp:215</span>
<span class="number">  86</span><span class="s">#4  0x6488509b in FCFSMouseStrategy::HandleInput (this=0x22fa98, input=..., process_input=true) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategyFCFS.cpp:83</span>
<span class="number">  87</span><span class="s">#5  0x64884f48 in FCFSMouseStrategy::HandleInput (this=0x22fa98, input=...) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategyFCFS.cpp:49</span>
<span class="number">  88</span><span class="s">#6  0x648840bb in MouseController::HandleRawInput (this=0x22fa78, rawinput=...) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseController.cpp:156</span>
<span class="number">  89</span><span class="s">#7  0x00404651 in _fu68___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:1408</span>
<span class="number">  90</span><span class="s">#8  0x00404264 in _fu60___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:1210</span>
<span class="number">  91</span><span class="s">#9  0x0040177a in _fu0___ZN9ManyMouse3logE () at C:\Research\RawInput\RainDropMouse\ManyMouse\src\RawInputHandler.cpp:44</span>
<span class="number">  92</span><span class="s">#10 0x6779cf46 in window_callback (hWnd=0xa0a3e, message=255, wParam=0, lParam=4008103) at C:\mingw\LIBS\A5112release\allegro\src\win\wwindow.c:428</span>
<span class="number">  93</span><span class="s">#11 0x75eef8d2 in USER32!GetMessageW () from C:\Windows\system32\user32.dll</span>
<span class="number">  94</span><span class="s">#12 0x75eef794 in USER32!GetWindowLongW () from C:\Windows\system32\user32.dll</span>
<span class="number">  95</span><span class="s">#13 0x6779cd3f in accept_mouse_event () at C:\mingw\LIBS\A5112release\allegro\src\win\wwindow.c:372</span>
<span class="number">  96</span><span class="s">#14 0x000a0a3e in ?? ()</span>
<span class="number">  97</span><span class="s">#15 0x000000ff in ?? ()</span>
<span class="number">  98</span><span class="s">#16 0x00000000 in ?? ()</span>
<span class="number">  99</span><span class="s">(gdb) bt 3 full</span>
<span class="number"> 100</span><span class="s">#0  0x67720969 in al_hold_bitmap_drawing (hold=false) at C:\mingw\LIBS\A5112release\allegro\src\display.c:520</span>
<span class="number"> 101</span><span class="s">        current_display = 0x2a94ef8</span>
<span class="number"> 102</span><span class="s">#1  0x648823aa in AllegroSetTargetBitmap (bmp=0x2ac5d88, name=0x648a2194 &lt;MouseController::SetMouseStrategy(MOUSE_STRATEGY)::__func__+1173&gt; "fcfs_mouse_buffer") at C:\Research\RawInput\RainDropMouse\ManyMouse\src\AllegroAndWindows.cpp:517</span>
<span class="number"> 103</span><span class="s">No locals.</span>
<span class="number"> 104</span><span class="s">#2  0x648855cd in FCFSMouseStrategy::DrawPointers (this=0x22fa98, strategy_state=FCFS_STATE_PROCESSING_CLICK) at C:\Research\RawInput\RainDropMouse\ManyMouse\src\MouseStrategyFCFS.cpp:159</span>
<span class="number"> 105</span><span class="s">        m = 0x2a228f8</span>
<span class="number"> 106</span><span class="s">        i = 0</span>
<span class="number"> 107</span><span class="s">        __func__ = "DrawPointers"</span>
<span class="number"> 108</span><span class="s">        image = 0x0</span>
<span class="number"> 109</span><span class="s">        mouse_vec = {&lt;std::_Vector_base&lt;Mouse*, std::allocator&lt;Mouse*&gt; &gt;&gt; = {_M_impl = {&lt;std::allocator&lt;Mouse*&gt;&gt; = {&lt;__gnu_cxx::new_allocator&lt;Mouse*&gt;&gt; = {&lt;No data fields&gt;}, &lt;No data fields&gt;}, _M_start = 0x2a8bff8, _M_finish = 0x2a8c000, _M_end_of_storage = 0x2a8c000}}, &lt;No data fields&gt;}</span>
<span class="number"> 110</span><span class="s">(More stack frames follow...)</span>
<span class="number"> 111</span><span class="s">(gdb) p al_get_current_display()</span>
<span class="number"> 112</span><span class="s">$1 = (struct ALLEGRO_DISPLAY *) 0x2a94ef8</span>
<span class="number"> 113</span><span class="s">(gdb) p PrintUserResources()</span>
<span class="number"> 114</span><span class="s">$2 = void</span>
<span class="number"> 115</span><span class="s">(gdb)</span>
</div></div><p>

From my program&#39;s log and resource tracking I can see that the ALLEGRO_DISPLAY* at 0x2a94ef8 has already been destroyed. So for some reason _al_get_current_display is returning a destroyed display, and I can&#39;t figure out why.</p><p>If anyone wants to look at my code or try debugging this, PM me your email, and I&#39;ll send you a read only invitation to my bitbucket repository. It only builds with MinGW and CodeBlocks atm, and it&#39;s windows only (XP or higher). It needs Allegro 5.1.12 or later, and the patch for Allegro I provided here (<a href="https://www.allegro.cc/forums/thread/615913/1018200#target">https://www.allegro.cc/forums/thread/615913/1018200#target</a>).</p><p>Edit<br />Sometimes it is not the display that has been destroyed, but a bitmap, and it crashes in a slightly different spot. But it always crashes at the same point of my program.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 08 Dec 2015 04:18:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just wondering: Did you put a break on &quot;al_destroy_display&quot; to see if it&#39;s called somewhere?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Thu, 10 Dec 2015 18:02:36 +0000</pubDate>
	</item>
</rss>
