<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>crash on destroy_display in OSX 10.9</title>
		<link>http://www.allegro.cc/forums/view/613627</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 10 Dec 2013 14:00:42 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>On Mac OSX 10.9 everytime when Factorio (www.factorio.com) tries to destroy the display there comes the crash. This is only issue on that specific OS, it works fine on lower OSX versions as well as Win and Linux. The stacktrace can be found here (on the game forum): <a href="http://www.factorioforums.com/forum/viewtopic.php?f=7&amp;t=1714">http://www.factorioforums.com/forum/viewtopic.php?f=7&amp;t=1714</a> From the stack trace it looks like some sound routines are still running when destroying the display.</p><p>I am probably missing something in the destroy sequence. The destroy sequence was done mostly by trial and error mechanism:-[, so I suppose there can be plenty wrong. Here is the relevant code of the destroy sequence:</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>Display::~Display<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>this-&gt;font<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>  this-&gt;font <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>this-&gt;itemCountFont<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  this-&gt;itemCountFont <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  7</span>  <span class="k1">delete</span> this-&gt;itemCountFontAgui<span class="k2">;</span>
<span class="number">  8</span>  this-&gt;itemCountFontAgui <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  9</span>  <span class="k1">delete</span> this-&gt;infiniteFontAgui<span class="k2">;</span>
<span class="number"> 10</span>  this-&gt;infiniteFontAgui <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 11</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>this-&gt;windowIcon<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  this-&gt;windowIcon <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 13</span>  <a href="http://www.allegro.cc/manual/al_shutdown_font_addon"><span class="a">al_shutdown_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  <a href="http://www.allegro.cc/manual/al_shutdown_ttf_addon"><span class="a">al_shutdown_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  <a href="http://www.allegro.cc/manual/al_shutdown_primitives_addon"><span class="a">al_shutdown_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  <a href="http://www.allegro.cc/manual/al_shutdown_image_addon"><span class="a">al_shutdown_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_uninstall_audio"><span class="a">al_uninstall_audio</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>this-&gt;display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>

and here is the relevant part from the resources allocation
</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>  this-&gt;display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>this-&gt;display<span class="k2">)</span>
<span class="number">  4</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to create display!"</span><span class="k2">)</span><span class="k2">;</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_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  6</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to initialize al_init_image_addon!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>  boost::filesystem::path windowIconPath <span class="k3">=</span> global-&gt;paths-&gt;graphics <span class="k3">/</span> <span class="s">"factorio-icon.png"</span><span class="k2">;</span>
<span class="number">  9</span>  this-&gt;windowIcon <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span>windowIconPath.string<span class="k2">(</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>this-&gt;windowIcon<span class="k2">)</span>
<span class="number"> 11</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span>ssprintf<span class="k2">(</span><span class="s">"Failed to load window icon! Loading from: %s"</span>, windowIconPath.string<span class="k2">(</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  <a href="http://www.allegro.cc/manual/al_set_display_icon"><span class="a">al_set_display_icon</span></a><span class="k2">(</span>this-&gt;display, this-&gt;windowIcon<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>this-&gt;display, ssprintf<span class="k2">(</span><span class="s">"Factorio %s"</span>, ApplicationVersion::currentVersion.str<span class="k2">(</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 15</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to initialize the keyboard!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 17</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to initialize the mouse!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 20</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to initialize the ttf addon!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 22</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to load primitives addon!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_audio"><span class="a">al_install_audio</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 24</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to install audio!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_acodec_addon"><span class="a">al_init_acodec_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 26</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to initialize audio codecs!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span><span class="n">50</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 28</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to reserve samples!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>  this-&gt;loadAllegroFonts<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span><span class="k2">}</span>
</div></div><p>

I played around with the OSX 10.9 machine for like an hour (I don&#39;t own one), but couldn&#39;t figure out what the problem was. I would appreciate any hints or ideas.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sleepywind)</author>
		<pubDate>Mon, 09 Dec 2013 19:35:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>General recommendation for destroy ordering is FILO - first in last out. So destroy things in the reverse order you initialized them.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 10 Dec 2013 03:31:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since you shut down Allegro in a destructor you might want to ensure that the destructor is really only run when appropriate.</p><p>It could well be a bug in Allegro (if so, please fix). You might try not shutting down the addons individually and letting al_uninstall_system take care of it. al_uninstall_system is not strictly necessary either.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Tue, 10 Dec 2013 14:00:42 +0000</pubDate>
	</item>
</rss>
