gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] /srv/bzr/gnash/trunk r11172: Adding NotifyDeathMessage to


From: Andrea Palmatè
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r11172: Adding NotifyDeathMessage to the Audio Task
Date: Sat, 27 Jun 2009 18:32:26 +0200
User-agent: Bazaar (1.13.1)

------------------------------------------------------------
revno: 11172
committer: Andrea Palmatè <address@hidden>
branch nick: gnash
timestamp: Sat 2009-06-27 18:32:26 +0200
message:
  Adding NotifyDeathMessage to the Audio Task
modified:
  libsound/aos4/sound_handler_ahi.cpp
  libsound/aos4/sound_handler_ahi.h
=== modified file 'libsound/aos4/sound_handler_ahi.cpp'
--- a/libsound/aos4/sound_handler_ahi.cpp       2009-06-27 15:26:16 +0000
+++ b/libsound/aos4/sound_handler_ahi.cpp       2009-06-27 16:32:26 +0000
@@ -125,7 +125,8 @@
     _audioOpened(false),
        _closing(false),
        _paused(true),
-       _started(false)
+       _started(false),
+       _fetching(false)
 {
     initAudio();
 }
@@ -137,9 +138,20 @@
        // on class destruction we must kill the Audio thread
        _closing = true;
        _paused = true;
-       IDOS->Delay(80);
+       IDOS->Delay(30);
        IExec->Signal((struct Task*)AudioPump,SIGBREAKF_CTRL_C);
+
+       IExec->WaitPort(_DMreplyport);
+       IExec->GetMsg(_DMreplyport);
+
+       if (_dmsg)                      IExec->FreeSysObject(ASOT_MESSAGE, 
_dmsg); _dmsg = 0;
+       if (_DMreplyport)       IExec->FreeSysObject(ASOT_PORT, _DMreplyport); 
_DMreplyport = 0;
        
+       while (_fetching)
+       {
+               gnashSleep(100);
+       }
+
     lock.unlock();
 
     // we already locked, so we call
@@ -165,7 +177,22 @@
     if ( _audioOpened ) return; // nothing to do
 
        log_debug(_("AOS4: Spawn Audio Process.."));
-
+       
+       _DMreplyport = (struct MsgPort*) IExec->AllocSysObjectTags(ASOT_PORT, 
TAG_DONE);
+       _dmsg            = (struct DeathMessage*) 
IExec->AllocSysObjectTags(ASOT_MESSAGE,
+                                                                               
                                                        ASOMSG_Size, 
sizeof(struct DeathMessage),
+                                                                               
                                                        ASOMSG_ReplyPort, 
_DMreplyport,
+                                                                               
                                                        TAG_DONE);
+       
+       if (!_dmsg || !_DMreplyport)
+       {
+               _audioOpened = false;
+               log_error(_("Unable to create Death Message for child!!"));
+               throw SoundException("Unable to create Death Message for 
child!!");
+       }
+       _dmsg->dm_Msg.mn_ReplyPort = _DMreplyport;
+       _dmsg->dm_Msg.mn_Length    = (uint16)sizeof(*_dmsg);
+       
        AudioPump = (struct Process *) IDOS->CreateNewProcTags (
                                                                        
NP_Entry,               (ULONG) audioTaskWrapper,
                                                                        
NP_Name,                PLAYERTASK_NAME,
@@ -176,6 +203,7 @@
                                                                        
NP_StackSize,   262144,
                                                                        
NP_Child,               TRUE,
                                                                        
NP_Priority,    PLAYERTASK_PRIORITY,
+                                                                       
NP_NotifyOnDeathMessage, _dmsg,
                                                                        
NP_EntryData,   this,
                                                                        
TAG_DONE);
 
@@ -343,10 +371,10 @@
            boost::mutex::scoped_lock lock(_mutex);
        if (!_closing) 
        {
+               _fetching = true;
                if (to)
                        sound_handler::fetchSamples(to, nSamples);
-               else
-                       return;
+               _fetching = false;
        }
                
                if (!_closing) return;

=== modified file 'libsound/aos4/sound_handler_ahi.h'
--- a/libsound/aos4/sound_handler_ahi.h 2009-06-22 22:05:53 +0000
+++ b/libsound/aos4/sound_handler_ahi.h 2009-06-27 16:32:26 +0000
@@ -86,7 +86,11 @@
        bool _closing;
        bool _paused;
        bool _started;
+       bool _fetching;
 
+       struct DeathMessage *_dmsg;     // the child Death Message
+       struct MsgPort *_DMreplyport;   // and its port
+       
     /// Mutex for making sure threads doesn't mess things up
     boost::mutex _mutex;
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]