<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>al_dtor_list is NULL, crash in al_create_timer</title>
		<link>http://www.allegro.cc/forums/view/616378</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 08 Jul 2016 03:26:47 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello guys.</p><p>I&#39;m getting a crash in my ManyMouse program. This time I&#39;ve built it with MSVS 2015 and the Allegro 5 Nuget package. It crashes on startup when I try to create a timer in al_create_timer.</p><p>Here&#39;s the backtrace :
</p><div class="source-code snippet"><div class="inner"><pre><span class="p"># allegro-debug-5.2.dll!_al_mutex_lock(_AL_MUTEX * m) Line 59</span>
<span class="p"># allegro-debug-5.2.dll!_al_register_destructor(_AL_DTOR_LIST * dtors, const char*</span>
<span class="p">#    name , void * object, void (void *) * func) Line 166</span>
<span class="p"># allegro-debug-5.2.dll!al_create_timer(double speed_secs) Line 235</span>
<span class="p"># ManyMouseRawInputTest.exe!RawInputHandler::SetupWindows() Line 435</span>
<span class="p"># ManyMouseRawInputTest.exe!main(int argc, char * * argv) Line 59</span>
</pre></div></div><p>

And here&#39;s the value of the local variables in frame 2 (al_create_timer line 235). Notice that al_dtor_list is NULL.
</p><pre>
+		_al_dtor_list	0x00000000 &lt;NULL&gt;	_AL_DTOR_LIST *
		speed_secs	0.016666666666666666	double
+		timer	0x0074a230 {es={__pad=0x0074a230 {7757888, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...} } ...}	ALLEGRO_TIMER *
		timer-&gt;counter	0.00000000000000000	double
		timer-&gt;speed_secs	0.016666666666666666	double
</pre><p>

Here&#39;s line 235 of al_create_timer :
</p><div class="source-code"><div class="toolbar"><span class="name">timernu.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"> 228</span>      <span class="k1">if</span> <span class="k2">(</span>timer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 229</span>         _al_event_source_init<span class="k2">(</span><span class="k3">&amp;</span>timer-&gt;es<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>         timer-&gt;started <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 231</span>         timer-&gt;count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 232</span>         timer-&gt;speed_secs <span class="k3">=</span> speed_secs<span class="k2">;</span>
<span class="number"> 233</span>         timer-&gt;counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 234</span>
<span class="number"> 235</span>         _al_register_destructor<span class="k2">(</span>_al_dtor_list, <span class="s">"timer"</span>, timer,
<span class="number"> 236</span>            <span class="k2">(</span><span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 237</span>      <span class="k2">}</span>
</div></div><p>

The exact same program compiled with MinGW 4.8.1 does not crash there. So it may be something to do with dlls? But I don&#39;t know what, because al_install_system is succeeding, otherwise the program would quit before it got there.</p><p>I can&#39;t get a simple test program to fail in the same way. This code works and exits with return code 0.
</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="p">#include "allegro5/allegro.h"</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>
<span class="number">  5</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_system"><span class="a">al_install_system</span></a><span class="k2">(</span>ALLEGRO_VERSION_INT, <a href="http://www.delorie.com/djgpp/doc/libc/libc_52.html" target="_blank">atexit</a><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  7</span>  <span class="k2">}</span>
<span class="number">  8</span>
<span class="number">  9</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>timer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>    <span class="k1">return</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 13</span>  <span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>
<span class="number"> 16</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 17</span><span class="k2">}</span>
</div></div><p>



<b>
EDIT
Any idea why the same program compiled with MSVS 2015 would crash while one compiled with MinGW would work?
</b><br />It shouldn&#39;t have anything to do with resources, and the fact that it is crashing inside an innocuous function like al_create_timer is a bit odd, as Allegro has been successfully initialized.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 08 Jul 2016 03:26:47 +0000</pubDate>
	</item>
</rss>
