﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
29	Passing third-party references causes assertion error	djfroofy		"In my simple example:

{{{
class Lobby(foolscap.Referenceable)
    lobby = {}
    ...
    def remote_befriend(self, inviter, invitee, token):
        lobby = self.lobby
        assert inviter in lobby and invitee in lobby
        inviter_ref, tk = self.lobby[inviter]
        assert token == tk
        invitee_ref, _tk = self.lobby[invitee]
        invitee_ref.callRemote('befriend', inviter, inviter_ref)
}}}

I get the following exception when I try to pass the inviter RemoteReference on the the invitee:

{{{
2007-10-24 11:01:44-0400 [-] exception in produce
2007-10-24 11:01:44-0400 [-] exception in produce
2007-10-24 11:01:44-0400 [-] SendBanana.sendFailed: [Failure instance: Traceback: <type 'exceptions.AssertionError'>: 
2007-10-24 11:01:44-0400 [-] /opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/slicers/root.py:107:send
2007-10-24 11:01:44-0400 [-] /opt/pyinstances/twisted/lib/python2.5/site-packages/twisted/internet/defer.py:239:callback
2007-10-24 11:01:44-0400 [-] /opt/pyinstances/twisted/lib/python2.5/site-packages/twisted/internet/defer.py:304:_startRunCallbacks
2007-10-24 11:01:44-0400 [-] /opt/pyinstances/twisted/lib/python2.5/site-packages/twisted/internet/defer.py:317:_runCallbacks
2007-10-24 11:01:44-0400 [-] --- <exception caught here> ---
2007-10-24 11:01:44-0400 [-] /opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/banana.py:197:produce
2007-10-24 11:01:44-0400 [-] /opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/referenceable.py:614:slice
2007-10-24 11:01:44-0400 [-] ]
2007-10-24 11:01:44-0400 [-] Sendfailed.sendfailed
2007-10-24 11:01:44-0400 [-] Unhandled Error
        Traceback (most recent call last):
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/slicers/root.py"", line 107, in send
            d.callback(None)
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/twisted/internet/defer.py"", line 239, in callback
            self._startRunCallbacks(result)
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/twisted/internet/defer.py"", line 304, in _startRunCallbacks
            self._runCallbacks()
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/twisted/internet/defer.py"", line 317, in _runCallbacks
            self.result = callback(self.result, *args, **kw)
        --- <exception caught here> ---
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/banana.py"", line 197, in produce
            obj = next()
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/referenceable.py"", line 614, in slice
            assert isinstance(tracker.url, str)
        exceptions.AssertionError: 
}}}

I am only registering a reference to the Lobby in the tub, although lobby of course holds references to the Chatter Referenceable objects as each joins the lobby.  According to the documentation under third-party references, I should not have to explicitly register the remote references I pass.  Also, to further complicate matters, it appears the reference to invitee is broken after this call, since I get this message when the lobby tries to relay normal chat lines:

{{{
2007-10-24 11:01:47-0400 [-] Unhandled error in Deferred:
2007-10-24 11:01:47-0400 [-] Unhandled Error
        Traceback (most recent call last):
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/broker.py"", line 545, in _doCall
            return obj.doRemoteCall(delivery.methodname, args, kwargs)
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/referenceable.py"", line 59, in doRemoteCall
            res = meth(*args, **kwargs)
          File ""chat.py"", line 72, in remote_chat
            chatter.callRemote('chat', time.asctime(), name, message)
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/referenceable.py"", line 379, in callRemote
            return defer.maybeDeferred(self._callRemote, _name, *args, **kwargs)
        --- <exception caught here> ---
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/twisted/internet/defer.py"", line 107, in maybeDeferred
            result = f(*args, **kw)
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/referenceable.py"", line 418, in _callRemote
            reqID = broker.newRequestID()
          File ""/opt/pyinstances/twisted/lib/python2.5/site-packages/foolscap/broker.py"", line 444, in newRequestID
            raise DeadReferenceError(""Calling Stale Broker"")
        foolscap.ipb.DeadReferenceError: Calling Stale Broker
}}}

Sorry, no version.  This is off mercurial trunk as of ... yesterday. Latest changeset: 256:69975a3ca4da.
"	defect	closed	minor	undecided	unknown		invalid		
