zaheer - in flumotion/trunk: . flumotion/component flumotion/manager

flumotion-commit at lists.fluendo.com flumotion-commit at lists.fluendo.com
Wed Feb 14 18:32:04 CET 2007


Author: zaheer
Date: Wed Feb 14 18:32:02 2007
New Revision: 4488

Modified:
   flumotion/trunk/ChangeLog
   flumotion/trunk/flumotion/component/feedcomponent010.py
   flumotion/trunk/flumotion/manager/component.py
Log:
2007-02-14  Zaheer Abbas Merali  <zaheerabbas at merali dot org>

        * flumotion/component/feedcomponent010.py:
        If we get a gstreamer error, errback any stateChangeDefers for
        READY->PAUSED.  This fixes issue where we do not errback on
        providing master clock.
        * flumotion/manager/component.py:
        Handle errback on providing master clock, and release port on
        error.
	Fixes #568.


Modified: flumotion/trunk/ChangeLog
==============================================================================
--- flumotion/trunk/ChangeLog	(original)
+++ flumotion/trunk/ChangeLog	Wed Feb 14 18:32:02 2007
@@ -1,3 +1,14 @@
+2007-02-14  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+	* flumotion/component/feedcomponent010.py:
+	If we get a gstreamer error, errback any stateChangeDefers for
+	READY->PAUSED.  This fixes issue where we do not errback on
+	providing master clock.
+	* flumotion/manager/component.py:
+	Handle errback on providing master clock, and release port on
+	error.
+	Fixes #568.
+
 2007-02-14  Andy Wingo  <wingo at pobox.com>
 
 	* flumotion/common/netutils.py (RoutingTable.addSubnet): Sanity

Modified: flumotion/trunk/flumotion/component/feedcomponent010.py
==============================================================================
--- flumotion/trunk/flumotion/component/feedcomponent010.py	(original)
+++ flumotion/trunk/flumotion/component/feedcomponent010.py	Wed Feb 14 18:32:02 2007
@@ -401,6 +401,17 @@
                     gerror.message, gerror.domain, gerror.code, debug),
                 id=id, priority=40)
             self.state.append('messages', m)
+            # if we have a state change defer to paused that has not yet
+            # fired, we should errback it
+            change = gst.STATE_CHANGE_READY_TO_PAUSED
+            if change in self._stateChangeDeferreds:
+                self.log("We have an error, going to errback pending state "
+                    "change defers")
+                dlist = self._stateChangeDeferreds[change]
+                for d in dlist:
+                    d.errback(errors.ComponentStartHandledError(gerror.message))
+                del self._stateChangeDeferreds[change]
+
         elif t == gst.MESSAGE_EOS:
             name = src.get_name()
             if name in ['eater:' + n for n in self.eater_names]:

Modified: flumotion/trunk/flumotion/manager/component.py
==============================================================================
--- flumotion/trunk/flumotion/manager/component.py	(original)
+++ flumotion/trunk/flumotion/manager/component.py	Wed Feb 14 18:32:02 2007
@@ -1044,6 +1044,19 @@
         workerName = componentAvatar.getWorkerName()
         port = self.vishnu.reservePortsOnWorker(workerName, 1)[0]
 
+        def failedToProvideMasterClock(failure):
+            # check if we actually did provide master clock and failed
+            # to give to a waiting component or we actually failed to
+            # provide a master clock
+            if avatarId in self._masterClockInfo:
+                self.warning('Failed to provide master clock info to a '
+                    'component waiting for it')
+            else:
+                self.warning('Failed to provide master clock itself')
+                self.debug('Going to release port')
+                self.vishnu.releasePortsOnWorker(workerName, [port])
+            self.warning(failure.getErrorMessage())
+
         if avatarId in self._masterClockInfo:
             self.warning('component %s already has master clock info: %r'
                          % (avatarId, self._masterClockInfo[avatarId]))
@@ -1051,6 +1064,7 @@
         d = componentAvatar.mindCallRemote('provideMasterClock', port)
         d.addCallback(setMasterClockInfo)
         d.addCallback(wakeClockMasterWaiters)
+        d.addErrback(failedToProvideMasterClock)
         return d
 
     def removeMasterClock(self, componentAvatar):


More information about the flumotion-commit mailing list