<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Program locks on exit (linux only)</title>
		<link>http://www.allegro.cc/forums/view/618625</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 13 Mar 2022 22:37:43 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My project freezes when I exit in linux only.</p><p>I have to either kill it with the allegro special death key combo CTRL-ALT-END<br />or navigate to the terminal and CTRL-C</p><p>I have tried all kind of different options in Code::Blocks...<br />setting application type to console...GUI<br />unchecking pause on exit...</p><p>I am pretty sure I am shutting down allegro properly</p><p>And the exact same code works fine on the windows version.</p><p>Any thoughts or suggestions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Tue, 08 Mar 2022 06:20:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you have a minimal code example that reproduces the problem?</p><p>If you have a complex codebase and it&#39;s too complicated to isolate, you might <span class="source-code">std::cout</span> some message (with <span class="source-code">std::flush</span>), between each point of destruction.   If the lock is happening after the last return in main, I would guess you have resources in the global space that were not properly freed, or properly uninitialized, or were initialized or created out of sequence from the sequence of destruction.</p><p>Also, In the past I&#39;ve found that I had objects that are being destructed in multiple places, or, had object trees that would loop through destruction of their children and get caught in some recursive or infinite loop.</p><p>Those are my thoughts, unfortunately I don&#39;t know exactly what to suggest unless I had a reproducible example.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 08 Mar 2022 06:49:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, I agree with you.<br />I will see if I can make a minimal example that reproduces the problem.<br />Just by doing so, I might very well find the answer myself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Tue, 08 Mar 2022 11:07:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try debugging it with gdb or valgrind. With gdb, you can CTRL-C when it gets stuck and see where it is.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 08 Mar 2022 20:28:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I finally figured out how to use gdb to get a trace:</p><p>(gdb) bt<br />#0  0x00007ffff7e042a1 in pthread_cond_destroy@@GLIBC_2.3.2 ()<br />    at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff7ebb43f in al_destroy_event_queue () at /lib/liballegro_monolith.so.5.2<br />#2  0x00007ffff7eba5dc in _al_run_destructors () at /lib/liballegro_monolith.so.5.2<br />#3  0x00007ffff7ec1a40 in al_uninstall_system () at /lib/liballegro_monolith.so.5.2<br />#4  0x00005555555c500e in final_wrapup() () at /home/m/Desktop/pm_client22/src/z_main.cpp:572<br />#5  0x00005555555c6876 in main(int, char**) (argument_count=1, argument_array=0x7fffffffe1b8)<br />    at /home/m/Desktop/pm_client22/src/z_main.cpp:1409<br />(gdb) where<br />#0  0x00007ffff7e042a1 in pthread_cond_destroy@@GLIBC_2.3.2 ()<br />    at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff7ebb43f in al_destroy_event_queue () at /lib/liballegro_monolith.so.5.2<br />#2  0x00007ffff7eba5dc in _al_run_destructors () at /lib/liballegro_monolith.so.5.2<br />#3  0x00007ffff7ec1a40 in al_uninstall_system () at /lib/liballegro_monolith.so.5.2<br />#4  0x00005555555c500e in final_wrapup() () at /home/m/Desktop/pm_client22/src/z_main.cpp:572<br />#5  0x00005555555c6876 in main(int, char**) (argument_count=1, argument_array=0x7fffffffe1b8)<br />    at /home/m/Desktop/pm_client22/src/z_main.cpp:1409</p><p>I am not sure what this means...I think it means it is freezing<br />trying to destroy something some pthread under queue...</p><p>basically the last lines in my code are:
</p><div class="source-code snippet"><div class="inner"><pre>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_destroy_event_queue(event_queue)\n"</span><span class="k2">)</span><span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>

   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\nBefore al_uninstall_system()\n"</span><span class="k2">)</span><span class="k2">;</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>
   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\nAfter al_uninstall_system()\n"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

It never prints the line after al_uninstall_system();</p><p>Does anyone have any insights or suggestions on other things I could try?</p><p>Update: I have done some more debugging:</p><p>In the allegro source I edited event.c</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><span class="k1">void</span> <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue<span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 1\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 2\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>   _al_unregister_destructor<span class="k2">(</span>_al_dtor_list, queue-&gt;dtor_item<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>   <span class="c">/* Unregister any event sources registered with this queue.  */</span>
<span class="number">  9</span>   <span class="k1">while</span> <span class="k2">(</span>_al_vector_is_nonempty<span class="k2">(</span><span class="k3">&amp;</span>queue-&gt;sources<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_SOURCE"><span class="a">ALLEGRO_EVENT_SOURCE</span></a> <span class="k3">*</span><span class="k3">*</span>slot <span class="k3">=</span> _al_vector_ref_back<span class="k2">(</span><span class="k3">&amp;</span>queue-&gt;sources<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>      <a href="http://www.allegro.cc/manual/al_unregister_event_source"><span class="a">al_unregister_event_source</span></a><span class="k2">(</span>queue, <span class="k3">*</span>slot<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>   <span class="k2">}</span>
<span class="number"> 13</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 3\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>   <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>_al_vector_is_empty<span class="k2">(</span><span class="k3">&amp;</span>queue-&gt;sources<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   _al_vector_free<span class="k2">(</span><span class="k3">&amp;</span>queue-&gt;sources<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 4\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>   <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>queue-&gt;events_head <span class="k3">=</span><span class="k3">=</span> queue-&gt;events_tail<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>   _al_vector_free<span class="k2">(</span><span class="k3">&amp;</span>queue-&gt;events<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 5\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>   _al_cond_destroy<span class="k2">(</span><span class="k3">&amp;</span>queue-&gt;cond<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 6\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   _al_mutex_destroy<span class="k2">(</span><span class="k3">&amp;</span>queue-&gt;mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 7\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   <a href="http://www.allegro.cc/manual/al_free"><span class="a">al_free</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"deq 8\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k2">}</span>
</div></div><p>

Now when I run my program I can see exactly how far it got:</p><p>Purple Martians Version 7.10<br />Allegro Version: 5.2.8.0<br />Desktop Resolution: 3840x2160<br />al_uninstall_audio()<br />al_destroy_font()<br />al_shutdown_ttf_addon()<br />al_shutdown_font_addon()<br />al_shutdown_image_addon()<br />al_shutdown_native_dialog_addon()<br />al_shutdown_primitives_addon()<br />al_unregister_event_source(event_queue, al_get_keyboard_event_source())<br />al_uninstall_keyboard()<br />al_unregister_event_source(event_queue, al_get_mouse_event_source())<br />al_uninstall_mouse()<br />al_unregister_event_source(event_queue, al_get_joystick_event_source())<br />al_uninstall_joystick()<br />al_unregister_event_source(event_queue, al_get_timer_event_source(mnu_timer));<br />al_unregister_event_source(event_queue, al_get_display_event_source(display))<br />al_destroy_display()<br />al_destroy_event_queue(event_queue)<br />deq 1<br />deq 2<br />deq 3<br />deq 4<br />deq 5<br />deq 6<br />deq 7<br />deq 8</p><p>Before al_uninstall_system()<br />deq 1<br />deq 2<br />deq 3<br />deq 4<br />deq 5</p><p>This is my code where I clean up before exit</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><span class="k1">void</span> final_wrapup<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>   save_display_window_position<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_uninstall_audio()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</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">  8</span>
<span class="number">  9</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_destroy_font()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>   <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>   <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>f1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>   <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>f2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>   <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>f3<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_shutdown_ttf_addon()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</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"> 17</span>
<span class="number"> 18</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_shutdown_font_addon()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</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"> 20</span>
<span class="number"> 21</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_shutdown_image_addon()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</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"> 23</span>
<span class="number"> 24</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_shutdown_native_dialog_addon()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   al_shutdown_native_dialog_addon<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_shutdown_primitives_addon()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</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"> 29</span>
<span class="number"> 30</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_unregister_event_source(event_queue,   al_get_keyboard_event_source())\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>   <a href="http://www.allegro.cc/manual/al_unregister_event_source"><span class="a">al_unregister_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_uninstall_keyboard()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>   <a href="http://www.allegro.cc/manual/al_uninstall_keyboard"><span class="a">al_uninstall_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_unregister_event_source(event_queue, al_get_mouse_event_source())\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>   <a href="http://www.allegro.cc/manual/al_unregister_event_source"><span class="a">al_unregister_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_uninstall_mouse()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>   <a href="http://www.allegro.cc/manual/al_uninstall_mouse"><span class="a">al_uninstall_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>
<span class="number"> 42</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_unregister_event_source(event_queue, al_get_joystick_event_source())\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>   <a href="http://www.allegro.cc/manual/al_unregister_event_source"><span class="a">al_unregister_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_joystick_event_source"><span class="a">al_get_joystick_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>
<span class="number"> 45</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_uninstall_joystick()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>   <a href="http://www.allegro.cc/manual/al_uninstall_joystick"><span class="a">al_uninstall_joystick</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>
<span class="number"> 48</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_unregister_event_source(event_queue, al_get_timer_event_source(mnu_timer));\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>   <a href="http://www.allegro.cc/manual/al_unregister_event_source"><span class="a">al_unregister_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>mnu_timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>
<span class="number"> 51</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_unregister_event_source(event_queue, al_get_display_event_source(display))\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>   <a href="http://www.allegro.cc/manual/al_unregister_event_source"><span class="a">al_unregister_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>
<span class="number"> 54</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_destroy_display()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>   <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>
<span class="number"> 57</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"al_destroy_event_queue(event_queue)\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>   <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>
<span class="number"> 60</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\nBefore al_uninstall_system()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</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"> 62</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\nAfter al_uninstall_system()\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 63</span><span class="k2">}</span>
</div></div><p>

I used to just have the one line...al_uninstall_system();</p><p>I added all the other to troubleshoot this freezing problem</p><p>If I comment them all out so only al_uninstall_system(); is called, this is what I get:</p><p>Purple Martians Version 7.10<br />Allegro Version: 5.2.8.0<br />Desktop Resolution: 3840x2160</p><p>Before al_uninstall_system()<br />deq 1<br />deq 2<br />deq 3<br />deq 4<br />deq 5</p><p>It looks like the first call to al_destroy_event_queue(event_queue); works when I call it explicitly.</p><p>But when al_uninstall_system() calls it, it dies...</p><p>I tried to look up the function at the line it dies at:</p><p>_al_cond_destroy(&amp;queue-&gt;cond);</p><p>But I am way out of my depth here...I could not make sense of anything</p><p>Could someone much smarter than I have a look and see?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Sat, 12 Mar 2022 10:36:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re getting closer. The backtrace doesn&#39;t show argument values for some reason. Were both allegro and your game compiled with debugging symbols?</p><p>Since your game is freezing, it&#39;s likely a deadlock in the destruction code.</p><p>Other useful commands in gdb :</p><pre>
info threads

thread apply all bt

thread #

frame #

</pre><p>

You should take a look at where the other threads are when you hit CTRL-C.</p><p>Likely another thread is waiting in al_cond_wait .
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 12 Mar 2022 19:31:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think I have all the debugging enabled:</p><p>Allegro:<br />-DCMAKE_BUILD_TYPE = {Debug | Release | RelWithDebInfo}<br />I used Debug</p><p>remade the library...<br />make<br />sudo make install</p><p>In the game:<br />compiler options: -Wall -g<br />link with -lallegro_monolith_debug</p><p>I ran gdb again and bt and where did not show anything new</p><p>I ran &#39;info threads&#39; and &#39;thread apply all bt&#39;</p><p>I got a lot more output, but nothing I can make sense of:</p><p>$ gdb ./pm<br />GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git<br />Copyright (C) 2021 Free Software Foundation, Inc.<br />License GPLv3+: GNU GPL version 3 or later &lt;<a href="http://gnu.org/licenses/gpl.html">http://gnu.org/licenses/gpl.html</a>&gt;<br />This is free software: you are free to change and redistribute it.<br />There is NO WARRANTY, to the extent permitted by law.<br />Type &quot;show copying&quot; and &quot;show warranty&quot; for details.<br />This GDB was configured as &quot;x86_64-linux-gnu&quot;.<br />Type &quot;show configuration&quot; for configuration details.<br />For bug reporting instructions, please see:<br />&lt;<a href="https://www.gnu.org/software/gdb/bugs/">https://www.gnu.org/software/gdb/bugs/</a>&gt;.<br />Find the GDB manual and other documentation resources online at:<br />    &lt;<a href="http://www.gnu.org/software/gdb/documentation/">http://www.gnu.org/software/gdb/documentation/</a>&gt;.</p><p>For help, type &quot;help&quot;.<br />Type &quot;apropos word&quot; to search for commands related to &quot;word&quot;...<br />Reading symbols from ./pm...<br />(gdb) run<br />Starting program: /home/m/Desktop/pm_client22/pm<br />[Thread debugging using libthread_db enabled]<br />Using host libthread_db library &quot;/lib/x86_64-linux-gnu/libthread_db.so.1&quot;.<br />[New Thread 0x7ffff4ca7700 (LWP 728683)]</p><p>Purple Martians Version 7.10<br />Allegro Version: 5.2.8.0<br />[Detaching after vfork from child process 728684]<br />System ID: Xglx<br />Desktop Resolution: 3840x2160<br />[New Thread 0x7fffebe03700 (LWP 728688)]<br />[New Thread 0x7fffe3fff700 (LWP 728689)]<br />[New Thread 0x7fffeb602700 (LWP 728690)]<br />[New Thread 0x7fffeae01700 (LWP 728691)]<br />[New Thread 0x7fffe9d42700 (LWP 728692)]<br />[New Thread 0x7fffe9541700 (LWP 728693)]<br />[New Thread 0x7fffe8b96700 (LWP 728694)]<br />[New Thread 0x7fffe37fe700 (LWP 728695)]<br />[New Thread 0x7fffe2f67700 (LWP 728696)]<br />[New Thread 0x7fffe2766700 (LWP 728697)]<br />[New Thread 0x7fffe1f65700 (LWP 728698)]<br />[New Thread 0x7fffe1764700 (LWP 728699)]<br />deq 1<br />deq 2<br />deq 3<br />deq 4<br />deq 5<br />^C<br />Thread 1 &quot;pm&quot; received signal SIGINT, Interrupt.<br />0x00007ffff7d752a1 in pthread_cond_destroy@@GLIBC_2.3.2 ()<br />   from /lib/x86_64-linux-gnu/libpthread.so.0<br />(gdb) bt<br />#0  0x00007ffff7d752a1 in pthread_cond_destroy@@GLIBC_2.3.2 ()<br />    at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff7e2a503 in _al_cond_destroy (cond=0x7fffa4000be0)<br />    at /home/m/Desktop/allegro5/include/allegro5/platform/aintuthr.h:76<br />#2  0x00007ffff7e22093 in al_destroy_event_queue (queue=0x7fffa4000b60)<br />    at /home/m/Desktop/allegro5/src/events.c:152<br />#3  0x00007ffff7e21791 in _al_run_destructors (dtors=0x5555632f48e0)<br />    at /home/m/Desktop/allegro5/src/dtor.c:120<br />#4  0x00007ffff7e32ec5 in al_uninstall_system () at /home/m/Desktop/allegro5/src/system.c:323<br />#5  0x00005555555c4f5a in final_wrapup() () at /home/m/Desktop/pm_client22/src/z_main.cpp:573<br />#6  0x00005555555c6888 in main(int, char**) (argument_count=1, argument_array=0x7fffffffe1b8)<br />    at /home/m/Desktop/pm_client22/src/z_main.cpp:1421<br />(gdb) where<br />#0  0x00007ffff7d752a1 in pthread_cond_destroy@@GLIBC_2.3.2 ()<br />    at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff7e2a503 in _al_cond_destroy (cond=0x7fffa4000be0)<br />    at /home/m/Desktop/allegro5/include/allegro5/platform/aintuthr.h:76<br />#2  0x00007ffff7e22093 in al_destroy_event_queue (queue=0x7fffa4000b60)<br />    at /home/m/Desktop/allegro5/src/events.c:152<br />#3  0x00007ffff7e21791 in _al_run_destructors (dtors=0x5555632f48e0)<br />    at /home/m/Desktop/allegro5/src/dtor.c:120<br />#4  0x00007ffff7e32ec5 in al_uninstall_system () at /home/m/Desktop/allegro5/src/system.c:323<br />#5  0x00005555555c4f5a in final_wrapup() () at /home/m/Desktop/pm_client22/src/z_main.cpp:573<br />#6  0x00005555555c6888 in main(int, char**) (argument_count=1, argument_array=0x7fffffffe1b8)<br />    at /home/m/Desktop/pm_client22/src/z_main.cpp:1421<br />(gdb) info threads<br />  Id   Target Id                                        Frame
</p><ul><li><p>1    Thread 0x7ffff4ca8cc0 (LWP 728679) &quot;pm&quot;          0x00007ffff7d752a1 in pthread_cond_destroy@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  2    Thread 0x7ffff4ca7700 (LWP 728683) &quot;pm&quot;          0x00007ffff7b528b3 in select ()
</p></li></ul><p>   from /lib/x86_64-linux-gnu/libc.so.6<br />  3    Thread 0x7fffebe03700 (LWP 728688) &quot;pm:disk$0&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  4    Thread 0x7fffe3fff700 (LWP 728689) &quot;pm:disk$1&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  5    Thread 0x7fffeb602700 (LWP 728690) &quot;pm:disk$2&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  6    Thread 0x7fffeae01700 (LWP 728691) &quot;pm:disk$3&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  7    Thread 0x7fffe9d42700 (LWP 728692) &quot;gmain&quot;       0x00007ffff7b503ff in poll ()<br />   from /lib/x86_64-linux-gnu/libc.so.6<br />  8    Thread 0x7fffe9541700 (LWP 728693) &quot;gdbus&quot;       0x00007ffff7b503ff in poll ()<br />   from /lib/x86_64-linux-gnu/libc.so.6<br />  9    Thread 0x7fffe8b96700 (LWP 728694) &quot;pm&quot;          0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  10   Thread 0x7fffe37fe700 (LWP 728695) &quot;pm&quot;          0x00007ffff7b528b3 in select ()<br />   from /lib/x86_64-linux-gnu/libc.so.6<br />  11   Thread 0x7fffe2f67700 (LWP 728696) &quot;pm&quot;          0x00007ffff7b22c61 in clock_nanosleep ()<br />   from /lib/x86_64-linux-gnu/libc.so.6<br />  12   Thread 0x7fffe2766700 (LWP 728697) &quot;threaded-ml&quot; 0x00007ffff7b503ff in poll ()<br />   from /lib/x86_64-linux-gnu/libc.so.6<br />  13   Thread 0x7fffe1f65700 (LWP 728698) &quot;pm&quot;          0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  14   Thread 0x7fffe1764700 (LWP 728699) &quot;pm&quot;          0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />(gdb) info threads<br />  Id   Target Id                                        Frame
</p><ul><li><p>1    Thread 0x7ffff4ca8cc0 (LWP 728679) &quot;pm&quot;          0x00007ffff7d752a1 in pthread_cond_destroy@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  2    Thread 0x7ffff4ca7700 (LWP 728683) &quot;pm&quot;          0x00007ffff7b528b3 in select () from /lib/x86_64-linux-gnu/libc.so.6<br />  3    Thread 0x7fffebe03700 (LWP 728688) &quot;pm:disk$0&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  4    Thread 0x7fffe3fff700 (LWP 728689) &quot;pm:disk$1&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  5    Thread 0x7fffeb602700 (LWP 728690) &quot;pm:disk$2&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  6    Thread 0x7fffeae01700 (LWP 728691) &quot;pm:disk$3&quot;   0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  7    Thread 0x7fffe9d42700 (LWP 728692) &quot;gmain&quot;       0x00007ffff7b503ff in poll () from /lib/x86_64-linux-gnu/libc.so.6<br />  8    Thread 0x7fffe9541700 (LWP 728693) &quot;gdbus&quot;       0x00007ffff7b503ff in poll () from /lib/x86_64-linux-gnu/libc.so.6<br />  9    Thread 0x7fffe8b96700 (LWP 728694) &quot;pm&quot;          0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  10   Thread 0x7fffe37fe700 (LWP 728695) &quot;pm&quot;          0x00007ffff7b528b3 in select () from /lib/x86_64-linux-gnu/libc.so.6<br />  11   Thread 0x7fffe2f67700 (LWP 728696) &quot;pm&quot;          0x00007ffff7b22c61 in clock_nanosleep () from /lib/x86_64-linux-gnu/libc.so.6<br />  12   Thread 0x7fffe2766700 (LWP 728697) &quot;threaded-ml&quot; 0x00007ffff7b503ff in poll () from /lib/x86_64-linux-gnu/libc.so.6<br />  13   Thread 0x7fffe1f65700 (LWP 728698) &quot;pm&quot;          0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0<br />  14   Thread 0x7fffe1764700 (LWP 728699) &quot;pm&quot;          0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
</p></li></ul><p>(gdb) thread apply all bt</p><p>Thread 14 (Thread 0x7fffe1764700 (LWP 728699) &quot;pm&quot;):<br />#0  0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff7e2a52d in _al_cond_wait (cond=0x7fffa4000be0, mutex=0x7fffa4000bb0) at /home/m/Desktop/allegro5/include/allegro5/platform/aintuthr.h:81<br />#2  0x00007ffff7e22c4f in al_wait_for_event (queue=0x7fffa4000b60, ret_event=0x7fffe1763820) at /home/m/Desktop/allegro5/src/events.c:435<br />#3  0x00007ffff7f396b0 in _al_kcm_feed_stream (self=0x555563568700, vstream=0x5555639d0900) at /home/m/Desktop/allegro5/addons/audio/kcm_stream.c:697<br />#4  0x00007ffff7e339ac in thread_func_trampoline (inner=0x555563568700, _outer=0x555563568700) at /home/m/Desktop/allegro5/src/threads.c:80<br />#5  0x00007ffff7ed404c in thread_proc_trampoline (data=0x555563568700) at /home/m/Desktop/allegro5/src/unix/uxthread.c:44<br />#6  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#7  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 13 (Thread 0x7fffe1f65700 (LWP 728698) &quot;pm&quot;):<br />#0  0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff744eda8 in pa_threaded_mainloop_wait () at /lib/x86_64-linux-gnu/libpulse.so.0<br />#2  0x00007ffff7470a78 in pa_simple_write () at /lib/x86_64-linux-gnu/libpulse-simple.so.0<br />#3  0x00007ffff7f3d5c9 in pulseaudio_update (self=0x55556387d1d0, data=0x55556388dfd0) at /home/m/Desktop/allegro5/addons/audio/pulseaudio.c:212<br />#4  0x00007ffff7e339ac in thread_func_trampoline (inner=0x55556387d1d0, _outer=0x55556387d1d0) at /home/m/Desktop/allegro5/src/threads.c:80<br />#5  0x00007ffff7ed404c in thread_proc_trampoline (data=0x55556387d1d0) at /home/m/Desktop/allegro5/src/unix/uxthread.c:44<br />#6  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#7  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 12 (Thread 0x7fffe2766700 (LWP 728697) &quot;threaded-ml&quot;):<br />#0  0x00007ffff7b503ff in poll () at /lib/x86_64-linux-gnu/libc.so.6<br />#1  0x00007ffff744e632 in  () at /lib/x86_64-linux-gnu/libpulse.so.0<br />#2  0x00007ffff7440079 in pa_mainloop_poll () at /lib/x86_64-linux-gnu/libpulse.so.0<br />#3  0x00007ffff74406ff in pa_mainloop_iterate () at /lib/x86_64-linux-gnu/libpulse.so.0<br />#4  0x00007ffff74407b0 in pa_mainloop_run () at /lib/x86_64-linux-gnu/libpulse.so.0<br />#5  0x00007ffff744e709 in  () at /lib/x86_64-linux-gnu/libpulse.so.0<br />#6  0x00007ffff625be08 in  () at /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-14.2.so<br />#7  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#8  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 11 (Thread 0x7fffe2f67700 (LWP 728696) &quot;pm&quot;):<br />#0  0x00007ffff7b22c61 in clock_nanosleep () at /lib/x86_64-linux-gnu/libc.so.6<br />#1  0x00007ffff7b28443 in nanosleep () at /lib/x86_64-linux-gnu/libc.so.6<br />#2  0x00007ffff7ed3e79 in _al_unix_rest (seconds=0.0096502640000000039) at /home/m/Desktop/allegro5/src/unix/utime.c:68<br />#3  0x00007ffff7e33803 in al_rest (seconds=0.0096502640000000039) at /home/m/Desktop/allegro5/src/system.c:520<br />#4  0x00007ffff7e34c37 in timer_thread_proc (self=0x5555635fbea0, unused=0x0) at /home/m/Desktop/allegro5/src/timernu.c:94<br />#5  0x00007ffff7ed404c in thread_proc_trampoline (data=0x5555635fbea0) at /home/m/Desktop/allegro5/src/unix/uxthread.c:44<br />#6  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#7  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 10 (Thread 0x7fffe37fe700 (LWP 728695) &quot;pm&quot;):<br />#0  0x00007ffff7b528b3 in select () at /lib/x86_64-linux-gnu/libc.so.6<br />#1  0x00007ffff7ed2d8f in fd_watch_thread_func (self=0x7ffff7fa9d80 &lt;fd_watch_thread&gt;, unused=0x0) at /home/m/Desktop/allegro5/src/unix/ufdwatch.c:89<br />#2  0x00007ffff7ed404c in thread_proc_trampoline (data=0x7ffff7fa9d80 &lt;fd_watch_thread&gt;) at /home/m/Desktop/allegro5/src/unix/uxthread.c:44<br />#3  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#4  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 9 (Thread 0x7fffe8b96700 (LWP 728694) &quot;pm&quot;):<br />#0  0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff7e2a52d in _al_cond_wait (cond=0x5555635fdeb0, mutex=0x555563590400) at /home/m/Desktop/allegro5/include/allegro5/platform/aintuthr.h:81<br />#2  0x00007ffff7e3492e in al_wait_cond (cond=0x5555635fdeb0, mutex=0x555563590400) at /home/m/Desktop/allegro5/src/threads.c:380<br />#3  0x00007ffff7ee8c8d in hotplug_proc (thread=0x5555635709e0, data=0x0) at /home/m/Desktop/allegro5/src/linux/ljoynu.c:658<br />#4  0x00007ffff7e339ac in thread_func_trampoline (inner=0x5555635709e0, _outer=0x5555635709e0) at /home/m/Desktop/allegro5/src/threads.c:80<br />#5  0x00007ffff7ed404c in thread_proc_trampoline (data=0x5555635709e0) at /home/m/Desktop/allegro5/src/unix/uxthread.c:44<br />#6  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#7  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 8 (Thread 0x7fffe9541700 (LWP 728693) &quot;gdbus&quot;):<br />#0  0x00007ffff7b503ff in poll () at /lib/x86_64-linux-gnu/libc.so.6<br />#1  0x00007ffff65ee0ae in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0<br />#2  0x00007ffff65ee40b in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0<br />#3  0x00007ffff5cdfa36 in  () at /lib/x86_64-linux-gnu/libgio-2.0.so.0<br />#4  0x00007ffff66170bd in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0<br />#5  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#6  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 7 (Thread 0x7fffe9d42700 (LWP 728692) &quot;gmain&quot;):<br />#0  0x00007ffff7b503ff in poll () at /lib/x86_64-linux-gnu/libc.so.6<br />#1  0x00007ffff65ee0ae in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0<br />#2  0x00007ffff65ee1cf in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0<br />#3  0x00007ffff65ee221 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0<br />#4  0x00007ffff66170bd in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0<br />#5  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#6  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 6 (Thread 0x7fffeae01700 (LWP 728691) &quot;pm:disk$3&quot;):<br />#0  0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff2e175db in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />--Type &lt;RET&gt; for more, q to quit, c to continue without paging--c<br />#2  0x00007ffff2e170a7 in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />#3  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#4  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 5 (Thread 0x7fffeb602700 (LWP 728690) &quot;pm:disk$2&quot;):<br />#0  0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff2e175db in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />#2  0x00007ffff2e170a7 in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />#3  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#4  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 4 (Thread 0x7fffe3fff700 (LWP 728689) &quot;pm:disk$1&quot;):<br />#0  0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff2e175db in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />#2  0x00007ffff2e170a7 in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />#3  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#4  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 3 (Thread 0x7fffebe03700 (LWP 728688) &quot;pm:disk$0&quot;):<br />#0  0x00007ffff7d757b2 in pthread_cond_wait@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff2e175db in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />#2  0x00007ffff2e170a7 in  () at /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so<br />#3  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#4  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 2 (Thread 0x7ffff4ca7700 (LWP 728683) &quot;pm&quot;):<br />#0  0x00007ffff7b528b3 in select () at /lib/x86_64-linux-gnu/libc.so.6<br />#1  0x00007ffff7ed9b9a in _al_xwin_background_thread (self=0x5555632e13f8, arg=0x5555632e1390) at /home/m/Desktop/allegro5/src/x/xevents.c:243<br />#2  0x00007ffff7ed404c in thread_proc_trampoline (data=0x5555632e13f8) at /home/m/Desktop/allegro5/src/unix/uxthread.c:44<br />#3  0x00007ffff7d6eea7 in start_thread () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#4  0x00007ffff7b5adef in clone () at /lib/x86_64-linux-gnu/libc.so.6</p><p>Thread 1 (Thread 0x7ffff4ca8cc0 (LWP 728679) &quot;pm&quot;):<br />#0  0x00007ffff7d752a1 in pthread_cond_destroy@@GLIBC_2.3.2 () at /lib/x86_64-linux-gnu/libpthread.so.0<br />#1  0x00007ffff7e2a503 in _al_cond_destroy (cond=0x7fffa4000be0) at /home/m/Desktop/allegro5/include/allegro5/platform/aintuthr.h:76<br />#2  0x00007ffff7e22093 in al_destroy_event_queue (queue=0x7fffa4000b60) at /home/m/Desktop/allegro5/src/events.c:152<br />#3  0x00007ffff7e21791 in _al_run_destructors (dtors=0x5555632f48e0) at /home/m/Desktop/allegro5/src/dtor.c:120<br />#4  0x00007ffff7e32ec5 in al_uninstall_system () at /home/m/Desktop/allegro5/src/system.c:323<br />#5  0x00005555555c4f5a in final_wrapup() () at /home/m/Desktop/pm_client22/src/z_main.cpp:573<br />#6  0x00005555555c6888 in main(int, char**) (argument_count=1, argument_array=0x7fffffffe1b8) at /home/m/Desktop/pm_client22/src/z_main.cpp:1421</p><p>UPDATE:</p><p>From the clues above (pulseaudio and kcm_stream) I started looking at audio...</p><p>When I commented out all my audio references the program exits clean!</p><p>I think I know where the problem is now....</p><p>Yes!</p><p>I was not destroying an audio stream I had created...I feel so dumb...</p><p>Well at least I learned a few things about how to debug....
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Sat, 12 Mar 2022 20:48:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There are lots of threads started with clone. I don&#39;t think you have to worry about those.</p><p>The timer thread is still running, as well as two audio threads.</p><p>What happens if you don&#39;t call al_uninstall_system at all? It should still be registered with atexit if you use al_init to initialize allegro.</p><p>I have Ubuntu 18.04 running in a VM. I could debug it there if you can provide src or binaries.</p><p><b>UPDATE</b><br />Per your update - glad you figured it out. Apparently allegro doesn&#39;t keep track of audio streams. It does keep track of bitmaps tied to displays, and timers, and event queues though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 13 Mar 2022 18:15:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618625/1051883#target">Michael Weiss</a> said:</div><div class="quote"><p> I think I know where the problem is now....</p><p> Yes!</p><p> I was not destroying an audio stream I had created...I feel so dumb...</p></div></div><p>OMG YAAAY!</p><p>Congrats. I was worried about this.</p><p>You seem to have put a lot of time/effort into whatever it is you&#39;re working on.  I&#39;m curious, what&#39;s your project?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 13 Mar 2022 18:54:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The one and only <a href="https://www.allegro.cc/depot/PurpleMartians">Purple Martians</a>....
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 13 Mar 2022 19:40:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My project is Purple Martians</p><p>I started it in 1997 with Allegro 2.2</p><p>It works identically in windows and linux.</p><p>The most difficult and rewarding thing I did with it is the networked multiplayer.</p><p>I recently just figured out how to use github for hosting webpages.<br />Here is the link to the project description webpages I just posted:</p><p><a href="https://mweiss001.github.io/">https://mweiss001.github.io/</a></p><p>Here is my project page on allegro.cc:</p><p><a href="https://www.allegro.cc/depot/PurpleMartians/">https://www.allegro.cc/depot/PurpleMartians/</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Sun, 13 Mar 2022 19:41:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I played a ton of Purple Martians on Windows until it just got too hard for me to keep up somewhere around 3/4 of the way through the game. Lots of hours of enjoyment though, figuring out the levels and having fun with the game mechanics. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 13 Mar 2022 21:34:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What are you playing with usually? Keyboard/Mouse? Joystick?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 13 Mar 2022 21:35:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I played exclusively with keyboard. I usually don&#39;t use mouse or joystick unless it&#39;s a FPS or flight sim.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 13 Mar 2022 21:55:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar. That means a lot to me that you enjoyed the gameplay!</p><p>I am currently designing a bunch of new levels.<br />I was not satisfied with the quality of levels in the older versions.</p><p>There were too many boring places where you retrace you steps many times to kill every last enemy.</p><p>I always thought there was so much more that I could do with level design...</p><p>I like the puzzle based ones, kind of like the portal test chambers.<br />You have to take items to specific place in specific orders...</p><p>But unlike portal, you have to kill things also...</p><p>I exclusively play with the keyboard. IJKL for direction, space for jump and C for fire. That is just where my hands naturally fall on the keyboard.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Sun, 13 Mar 2022 22:13:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You know, just a few days ago I stumbled upon some good level design tutorial/tips graphics on pinterest.  Here&#39;s an example:</p><p><span class="remote-thumbnail"><span class="json">{"name":"613140","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/9\/49ccd3071d8c37ed093d241bc8fdfb6b.jpg","w":2112,"h":1188,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/9\/49ccd3071d8c37ed093d241bc8fdfb6b"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/9/49ccd3071d8c37ed093d241bc8fdfb6b-240.jpg" alt="613140" width="240" height="135" /></span></p><p>It&#39;s this guy Tommy Norberg (<a href="https://www.tommynorberg.com/">site</a>) who has made his entire brand just around level design and level design education.  He focuses almost entirely on competition style levels (fps or pvp) because, apparently, that&#39;s where all the hottest design theory is.</p><p>He has a twitter, you might check out his <a href="https://www.google.com/search?q=tommy+norberg+level+design&amp;sxsrf=APq-WBuEEBLJsUsJPQ_hQmQIfw3rnPlVeQ:1647192647247&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ved=2ahUKEwjdjfbkzsP2AhXNW80KHbXfC1EQ_AUoAXoECAEQAw&amp;biw=1271&amp;bih=1032&amp;dpr=2">pics on google</a> for inspiration.</p><p>Any one of those could spark an entire idea for level design.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 13 Mar 2022 22:37:43 +0000</pubDate>
	</item>
</rss>
