def _start_callbacks(self, result, exception):
        """Perform the callback chain going back and forth between the callback
        and errback as needed.

        If an exception is raised and the entire chain is gone through without a valid
        errback then its simply logged.

        """
        if self._cancelled:
            raise CancelledError()
        if self.called:
            raise AlreadyCalledError()

        self._result = result
        self._exception = exception
        if self._exception:
            self._tb_info = ''.join(traceback.format_tb(sys.exc_info()[2])) 
        self.called = True
        self._do_callbacks()