<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>(A5)  random crash on al_detach_voice()</title>
		<link>http://www.allegro.cc/forums/view/610569</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 12 Jul 2012 05:35:33 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Using Allegro 5.0.5 running on Win XP, Directx9.0c I&#39;m encountering an intermittent lockup when cleaning up audio.</p><p>Under Win7, I haven&#39;t encountered the bug at all.</p><p>If I destroy the mixer before destroying my voice, sometimes the program will lock at al_destroy_mixer.</p><p>If I destroy the voice first, <b>it will hang on al_detach_voice(voice).  </b></p><p>Once in a while it will get passed al_destroy_voice, al_destroy_mixer() and then hang on al_uninstall_audio().</p><p>This may be a huge assumption, but will al_destroy_mixer detach any attached voices before it is cleaned up?   Will al_uninstall_audio() also attempt to do the same thing?  <b>WHAT IS THE PROPER ORDER?</b></p><p>When I say intermittent, I mean sometimes it will run/exit fine 20 times in a row (just loading main screen, exiting) and then randomly crash.  Only thing I can do to reproduce it is to keep running/exiting until it happens.  Code:blocks debugger doesnt appear to even catch that the app is hung up?</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>    audio cleanup routine
<span class="number">  3</span>    ...
<span class="number">  4</span>
<span class="number">  5</span>   
<span class="number">  6</span>
<span class="number">  7</span>        <a href="http://www.allegro.cc/manual/al_stop_samples"><span class="a">al_stop_samples</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>       
<span class="number"> 10</span>        <span class="k1">if</span> <span class="k2">(</span>stream<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"destroying stream...\n"</span><span class="k2">;</span>
<span class="number"> 12</span>            
<span class="number"> 13</span>            <a href="http://www.allegro.cc/manual/al_set_audio_stream_playing"><span class="a">al_set_audio_stream_playing</span></a><span class="k2">(</span>stream, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</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_audio_stream_event_source"><span class="a">al_get_audio_stream_event_source</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>           
<span class="number"> 16</span>
<span class="number"> 17</span>            <a href="http://www.allegro.cc/manual/al_detach_audio_stream"><span class="a">al_detach_audio_stream</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>            <a href="http://www.allegro.cc/manual/al_destroy_audio_stream"><span class="a">al_destroy_audio_stream</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>        <span class="k2">}</span>
<span class="number"> 20</span>        <span class="k1">if</span> <span class="k2">(</span>menuStream<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"destroying menuStream...\n"</span><span class="k2">;</span>
<span class="number"> 22</span>            
<span class="number"> 23</span>            <a href="http://www.allegro.cc/manual/al_set_audio_stream_playing"><span class="a">al_set_audio_stream_playing</span></a><span class="k2">(</span>menuStream, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</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_audio_stream_event_source"><span class="a">al_get_audio_stream_event_source</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>          
<span class="number"> 26</span>            <a href="http://www.allegro.cc/manual/al_detach_audio_stream"><span class="a">al_detach_audio_stream</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>            <a href="http://www.allegro.cc/manual/al_destroy_audio_stream"><span class="a">al_destroy_audio_stream</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>        <span class="k2">}</span>
<span class="number"> 29</span>
<span class="number"> 30</span>        <span class="k1">if</span> <span class="k2">(</span>mixer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_destroy_mixer...\n"</span><span class="k2">;</span>
<span class="number"> 32</span>            <a href="http://www.allegro.cc/manual/al_destroy_mixer"><span class="a">al_destroy_mixer</span></a><span class="k2">(</span>mixer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>        <span class="k2">}</span>
<span class="number"> 34</span>
<span class="number"> 35</span>        <span class="k1">if</span> <span class="k2">(</span>voice<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 36</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_set_voice_playing(voice, false)...\n"</span><span class="k2">;</span>
<span class="number"> 37</span>            <a href="http://www.allegro.cc/manual/al_set_voice_playing"><span class="a">al_set_voice_playing</span></a><span class="k2">(</span>voice, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_detach_voice(voice);...\n"</span><span class="k2">;</span>
<span class="number"> 39</span>            <a href="http://www.allegro.cc/manual/al_detach_voice"><span class="a">al_detach_voice</span></a><span class="k2">(</span>voice<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_destroy_voice(voice);...\n"</span><span class="k2">;</span>
<span class="number"> 41</span>            <a href="http://www.allegro.cc/manual/al_destroy_voice"><span class="a">al_destroy_voice</span></a><span class="k2">(</span>voice<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>        <span class="k2">}</span>
<span class="number"> 43</span>
<span class="number"> 44</span>
<span class="number"> 45</span>
<span class="number"> 46</span>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_is_audio_installed"><span class="a">al_is_audio_installed</span></a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 47</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_uninstall_audio...\n"</span><span class="k2">;</span>
<span class="number"> 48</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"> 49</span>        <span class="k2">}</span>
</div></div><p>


I can&#39;t really post complete code due to the size of the project and the resources involved.  Just wanted to know if anyone else has had intermittent issues with cleaning up audio, and if so, what might I be doing wrong?</p><p>In that code, I am setting the streams to stop regardless of their state since  if al_get_audio_stream_playing(stream) was returning false even though the stream WAS playing.  Curious...</p><p>I generally don&#39;t post threads, preferring to smash my head against the wall and look at other forum posts until I&#39;ve fixed the issue but I&#39;ve searched high and low for similar issues and of the two threads I&#39;ve seen, both seem to be unanswered.</p><p>Help me Obi Wan Allegro.cc... you&#39;re my only hope!</p><p><b>Edit:  Debug did catch a crash finally...  </b></p><p>#0 00000000	0x00448574 in _dsound_stop_voice() (??:??)<br />#1 00000000	0x00442f84 in al_detach_voice() (??:??)<br />#2 00000000	0x004467bf in _al_kcm_destroy_sample() (??:??)<br />#3 00000000	0x004445d6 in al_destroy_mixer() (??:??)<br />#4 00000000	0x00442930 in _al_kcm_shutdown_default_mixer() (??:??)<br />#5 00000000	0x00441e28 in al_uninstall_audio() (??:??)<br />#6 00000000	0x00467d1d in _al_run_exit_funcs() (??:??)<br />#7 00000000	0x00462ee8 in al_uninstall_system() (??:??)<br />#8 77C39E24	msvcrt!_initterm() (C:\WINNT\system32\msvcrt.dll:??)<br />#9 77C39EC5	msvcrt!_cexit() (C:\WINNT\system32\msvcrt.dll:??)<br />#10 00000000	0x00000000 in ??() (??:??)</p><p><b>EDIT - Updated Code:</b><br />Rather than crashing on al_detach_voice(); this code generally crashes on al_detach_mixer() unless I check al_get_mixer_attached(mixer).  If I check, it seems to be false, and thus doesnt detach and it will crash on al_destroy_mixer() </p><p>I can&#39;t see anything in allegro.log that appears to be of relevance...</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">if</span> <span class="k2">(</span>stream<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"destroying stream...\n"</span><span class="k2">;</span>
<span class="number">  4</span>            <a href="http://www.allegro.cc/manual/al_drain_audio_stream"><span class="a">al_drain_audio_stream</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>            <a href="http://www.allegro.cc/manual/al_set_audio_stream_playing"><span class="a">al_set_audio_stream_playing</span></a><span class="k2">(</span>stream, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</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_audio_stream_event_source"><span class="a">al_get_audio_stream_event_source</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>
<span class="number">  9</span>            <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_audio_stream_attached"><span class="a">al_get_audio_stream_attached</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_detach_audio_stream"><span class="a">al_detach_audio_stream</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 10</span>            <a href="http://www.allegro.cc/manual/al_destroy_audio_stream"><span class="a">al_destroy_audio_stream</span></a><span class="k2">(</span>stream<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>        <span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>        <span class="k1">if</span> <span class="k2">(</span>menuStream<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"destroying menuStream...\n"</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>            <a href="http://www.allegro.cc/manual/al_drain_audio_stream"><span class="a">al_drain_audio_stream</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>            <a href="http://www.allegro.cc/manual/al_set_audio_stream_playing"><span class="a">al_set_audio_stream_playing</span></a><span class="k2">(</span>menuStream, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</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_audio_stream_event_source"><span class="a">al_get_audio_stream_event_source</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>
<span class="number"> 22</span>           <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_audio_stream_attached"><span class="a">al_get_audio_stream_attached</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_detach_audio_stream"><span class="a">al_detach_audio_stream</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 23</span>            <a href="http://www.allegro.cc/manual/al_destroy_audio_stream"><span class="a">al_destroy_audio_stream</span></a><span class="k2">(</span>menuStream<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>        <span class="k2">}</span>
<span class="number"> 25</span>
<span class="number"> 26</span>        <span class="c">//#ifndef BYPASS_MIXER</span>
<span class="number"> 27</span>        <span class="k1">if</span> <span class="k2">(</span>mixer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 28</span>
<span class="number"> 29</span>            <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_mixer_attached"><span class="a">al_get_mixer_attached</span></a><span class="k2">(</span>mixer<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 30</span>                std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_detach_mixer...\n"</span><span class="k2">;</span>
<span class="number"> 31</span>                <a href="http://www.allegro.cc/manual/al_detach_mixer"><span class="a">al_detach_mixer</span></a><span class="k2">(</span>mixer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>            <span class="k2">}</span>
<span class="number"> 33</span>
<span class="number"> 34</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_destroy_mixer...\n"</span><span class="k2">;</span>
<span class="number"> 35</span>            <a href="http://www.allegro.cc/manual/al_destroy_mixer"><span class="a">al_destroy_mixer</span></a><span class="k2">(</span>mixer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>        <span class="k2">}</span>
<span class="number"> 37</span>        <span class="c">//#endif</span>
<span class="number"> 38</span>
<span class="number"> 39</span>        <span class="k1">if</span> <span class="k2">(</span>voice<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 40</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_detach_voice(voice);...\n"</span><span class="k2">;</span>
<span class="number"> 41</span>            <a href="http://www.allegro.cc/manual/al_detach_voice"><span class="a">al_detach_voice</span></a><span class="k2">(</span>voice<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_destroy_voice(voice);...\n"</span><span class="k2">;</span>
<span class="number"> 43</span>            <a href="http://www.allegro.cc/manual/al_destroy_voice"><span class="a">al_destroy_voice</span></a><span class="k2">(</span>voice<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>        <span class="k2">}</span>
<span class="number"> 45</span>
<span class="number"> 46</span>
<span class="number"> 47</span>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_is_audio_installed"><span class="a">al_is_audio_installed</span></a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 48</span>            std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"al_uninstall_audio...\n"</span><span class="k2">;</span>
<span class="number"> 49</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"> 50</span>        <span class="k2">}</span>
</div></div><p>

Tearing my hair out of my skull now...   Why is it so random?  Why do I have to run it 20-30 times before it&#39;ll happen?  Then sometimes it&#39;ll happen as soon as I build and run once....
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (thebignic)</author>
		<pubDate>Wed, 04 Jul 2012 23:00:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could you try running this with a) 5.0.7 and b) with debug symbols turned on (so we see the lines in the backtrace)?</p><p>Anyway, the order you&#39;re doing things seems to be right, as this is the order Allegro uses for its default mixer:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_destroy_mixer"><span class="a">al_destroy_mixer</span></a><span class="k2">(</span>allegro_mixer<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_destroy_voice"><span class="a">al_destroy_voice</span></a><span class="k2">(</span>allegro_voice<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 05 Jul 2012 03:06:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Linking to 5.0.7 now...   Same issue.<br />Not sure why the debug trace shows up as allegro-5.0.x? </p><p>#0 0045002C	_dsound_stop_voice(voice=0x1b130c0) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\dsound.cpp:460)<br />#1 0044545A	al_detach_voice(voice=0x1b130c0) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_voice.c:376)<br />#2 0044A5C3	_al_kcm_detach_from_parent(spl=0x1b13738) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_instance.c:116)<br />#3 0044A86D	_al_kcm_destroy_sample(spl=0x1b13738, unregister=false) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_instance.c:205)<br />#4 00448CDD	al_destroy_mixer(mixer=0x1b13738) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_mixer.c:943)<br />#5 00444585	_al_kcm_shutdown_default_mixer() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_sample.c:476)<br />#6 0044358A	al_uninstall_audio() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\audio.c:323)<br />#7 004AF399	_al_run_exit_funcs() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\src\allegro.c:136)<br />#8 004A8C5B	al_uninstall_system() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\src\system.c:310)<br />#9 77C39E24	msvcrt!_initterm() (C:\WINNT\system32\msvcrt.dll:??)<br />#10 77C39EC5	msvcrt!_cexit() (C:\WINNT\system32\msvcrt.dll:??)<br />#11 00000000	0x00000000 in ??() (??:??)</p><p><b>From dsound.cpp...</b><br />Line 460 is the last error... could this be failing because the buffer is already released?  Shouldn&#39;t we check if its still valid before releasing?   I&#39;ve never compiled allegro on my own... not looking forward to the prospect of it, or the prospect of debugging directX having NO experience with it...</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"> 437</span><span class="c">/* The stop_voice method should stop playback. For non-streaming voices, it</span>
<span class="number"> 438</span><span class="c">   should leave the data loaded, and reset the voice position to 0. */</span>
<span class="number"> 439</span><span class="k1">static</span> <span class="k1">int</span> _dsound_stop_voice<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VOICE"><span class="a">ALLEGRO_VOICE</span></a><span class="k3">*</span> voice<span class="k2">)</span>
<span class="number"> 440</span><span class="k2">{</span>
<span class="number"> 441</span>   ALLEGRO_DS_DATA <span class="k3">*</span>ex_data <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DS_DATA <span class="k3">*</span><span class="k2">)</span>voice-&gt;extra<span class="k2">;</span>
<span class="number"> 442</span>
<span class="number"> 443</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>ex_data-&gt;ds8_buffer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 444</span>      ALLEGRO_ERROR<span class="k2">(</span><span class="s">"Trying to stop empty voice buffer\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 445</span>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 446</span>   <span class="k2">}</span>
<span class="number"> 447</span>
<span class="number"> 448</span>   <span class="c">/* if playing a sample */</span>
<span class="number"> 449</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>voice-&gt;is_streaming<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 450</span>      ex_data-&gt;ds8_buffer-&gt;Stop<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 451</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 452</span>   <span class="k2">}</span>
<span class="number"> 453</span>
<span class="number"> 454</span>   <span class="k1">if</span> <span class="k2">(</span>ex_data-&gt;stop_voice <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 455</span>      ex_data-&gt;stop_voice <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 456</span>      <a href="http://www.allegro.cc/manual/al_join_thread"><span class="a">al_join_thread</span></a><span class="k2">(</span>ex_data-&gt;thread, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 457</span>      <a href="http://www.allegro.cc/manual/al_destroy_thread"><span class="a">al_destroy_thread</span></a><span class="k2">(</span>ex_data-&gt;thread<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 458</span>   <span class="k2">}</span>
<span class="number"> 459</span>
<span class="number"> 460</span>   ex_data-&gt;ds8_buffer-&gt;Release<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 461</span>   ex_data-&gt;ds8_buffer <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 462</span>
<span class="number"> 463</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 464</span><span class="k2">}</span>
</div></div><p>



Also in dsound.cpp...  Not sure if/when this is called (perhaps completely unrelated)  Is the buffer intentionally not NULLed?  Shouldnt it be?</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"> 375</span><span class="c">/* The unload_voice method unloads a sample previously loaded with load_voice.</span>
<span class="number"> 376</span><span class="c">   This method should not be called on a streaming voice. */</span>
<span class="number"> 377</span><span class="k1">static</span> <span class="k1">void</span> _dsound_unload_voice<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VOICE"><span class="a">ALLEGRO_VOICE</span></a> <span class="k3">*</span>voice<span class="k2">)</span>
<span class="number"> 378</span><span class="k2">{</span>
<span class="number"> 379</span>   ALLEGRO_DS_DATA <span class="k3">*</span>ex_data <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DS_DATA <span class="k3">*</span><span class="k2">)</span>voice-&gt;extra<span class="k2">;</span>
<span class="number"> 380</span>   ex_data-&gt;ds8_buffer-&gt;Release<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 381</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (thebignic)</author>
		<pubDate>Thu, 05 Jul 2012 04:20:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Where do you get your voice/mixer from? It&#39;s not the allegro&#39;s default voice/mixer by any chance, is it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 05 Jul 2012 05:15:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not sure what the &quot;default mixer&quot; would be?  This is the initial setup</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">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="k2">{</span>
<span class="number">  2</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to initialize audio!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>          <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  4</span>       <span class="k2">}</span>
<span class="number">  5</span>
<span class="number">  6</span>std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" initialized audio\n"</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</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="k2">{</span>
<span class="number">  9</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to initialize audio codecs!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>          <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 11</span>       <span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" initialized  al_init_acodec_addon()\n"</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</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_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span><span class="n">16</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 17</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to reserve samples!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>          <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 19</span>       <span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span>        voice <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_voice"><span class="a">al_create_voice</span></a><span class="k2">(</span><span class="n">44100</span>, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>voice<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Could not create ALLEGRO_VOICE.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>            <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 25</span>        <span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span>        mixer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_mixer"><span class="a">al_create_mixer</span></a><span class="k2">(</span><span class="n">44100</span>, ALLEGRO_AUDIO_DEPTH_FLOAT32, ALLEGRO_CHANNEL_CONF_2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>         <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>mixer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 29</span>             <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Could not create ALLEGRO_MIXER.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>             <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 31</span>             <span class="k2">}</span>
<span class="number"> 32</span>
<span class="number"> 33</span>             <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_attach_mixer_to_voice"><span class="a">al_attach_mixer_to_voice</span></a><span class="k2">(</span>mixer, voice<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 34</span>                 <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"al_attach_mixer_to_voice failed.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>                 <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 36</span>             <span class="k2">}</span>
<span class="number"> 37</span>
<span class="number"> 38</span>
<span class="number"> 39</span>        initialized<span class="k3">=</span><span class="k1">true</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (thebignic)</author>
		<pubDate>Thu, 05 Jul 2012 05:33:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>al_reserve_samples already will create a voice and mixer for you (and attach it), so you don&#39;t need the last three calls at all.</p><p>It still sounds like there is a bug in Allegro as creating a second voice is supposed to work. But a quick fix is likely to either not call al_reserve_samples (and don&#39;t use al_play_sample) or don&#39;t create a second voice.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 05 Jul 2012 07:26:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Remarked out all the voice and mixer code, and attached my streams to the default mixer via al_get_default_mixer().</p><p>Seemed to work for a while (about thirty runs) but crashed again, this time on al_uninstall_audio();   Still crashed on the same line though....</p><p>#0 0044ED30	_dsound_stop_voice(voice=0x1b13868) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\dsound.cpp:460)<br />#1 0044FDDA	al_detach_voice(voice=0x1b13868) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_voice.c:376)<br />#2 0044536F	_al_kcm_detach_from_parent(spl=0x121c58e0) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_instance.c:116)<br />#3 00445619	_al_kcm_destroy_sample(spl=0x121c58e0, unregister=false) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_instance.c:205)<br />#4 0044B419	al_destroy_mixer(mixer=0x121c58e0) (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_mixer.c:943)<br />#5 00444751	_al_kcm_shutdown_default_mixer() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\kcm_sample.c:476)<br />#6 00443756	al_uninstall_audio() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\addons\audio\audio.c:323)<br />#7 004AF565	_al_run_exit_funcs() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\src\allegro.c:136)<br />#8 004A8E27	al_uninstall_system() (D:\Libraries\build\allegro\src\allegro-5.0.x\allegro-5.0.x\src\system.c:310)<br />#9 77C39E24	msvcrt!_initterm() (C:\WINNT\system32\msvcrt.dll:??)<br />#10 77C39EC5	msvcrt!_cexit() (C:\WINNT\system32\msvcrt.dll:??)<br />#11 00000000	0x00000000 in ??() (??:??)</p><p>I have the most recent audio drivers for the chipset. Allegro.log doesn&#39;t appear to have any relevant information and I find that somewhat curious.</p><p>Perhaps I should note that the crash seems to occur even if I hadn&#39;t actually played any samples or streams yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (thebignic)</author>
		<pubDate>Thu, 05 Jul 2012 20:09:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Does this happen with the Allegro examples, like ex_audio_simple? I tried the examples on WinXP and they never crashed for me.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 12 Jul 2012 05:35:33 +0000</pubDate>
	</item>
</rss>
