On 21 Jan, 03:30 pm, ter...@gmail.com wrote:
On Thu, Jan 21, 2010 at 3:58 AM,  <exar...@twistedmatrix.com> wrote:
On 03:43 am, gl...@twistedmatrix.com wrote:

On Jan 20, 2010, at 3:20 PM, Mikhail Terekhov wrote:
Hi,

I've switched recently from 8.2 to 9.0 and noticed that some of my
client scripts
hang in reactor.stop() on exit sometimes. That never happened before.
For
example if I run the gethostbyname.py from the twisted-names examples
directory
it prints the correct result and hangs forever until I press Cntrl-C.
Then it prints the
following traceback:


I don't see the behavior you describe, but I do see this traceback on
trunk with every 3rd run or so of that example - maybe the example is
buggy?

doc/names/examples$ python gethostbyname.py �twistedmatrix.com
twisted/names/dns.py:1670: DeprecationWarning: Please only pass IPs to
write(), not hostnames
�self.transport.write(message.toStr(), address)
Traceback (most recent call last):
�File "twisted/internet/udp.py", line 121, in doRead
� �self.protocol.datagramReceived(data, addr)
�File "twisted/names/dns.py", line 1700, in datagramReceived
� �d.callback(m)
�File "twisted/internet/defer.py", line 239, in callback
� �self._startRunCallbacks(result)
�File "twisted/internet/defer.py", line 308, in _startRunCallbacks
� �self._runCallbacks()
--- <exception caught here> ---
�File "twisted/internet/defer.py", line 324, in _runCallbacks
� �self.result = callback(self.result, *args, **kw)
�File "twisted/names/common.py", line 239, in <lambda>
   ).addBoth(lambda passthrough: (r.protocol.transport.stopListening(),
passthrough)[1])
exceptions.AttributeError: 'NoneType' object has no attribute
'stopListening'

http://twistedmatrix.com/trac/ticket/4210

I think I found it, it is somewhat different IMHO. When you run

  python gethostbyname.py localhost

notice the '''localhost''' there, the getHostByName('localhost') returns
defer.succeed(..) so the callback gotResult and hence reactor.stop()
is called even before reactor is run and for some reason it hangs there
inside reactor.stop().

So there are actually two points here:

1. the gethostbyname.py example should probably be changed something
   like this

This sounds a lot like another example of the problem described in <http://twistedmatrix.com/trac/ticket/3270>.
[snip]

2. Why reactor.stop() hangs if it is called before reactor.run()?

It doesn't. It raises an exception. The reason the example hangs is that since reactor.stop() was called before reactor.run(), it's not called *after* reactor.run(). So the reactor never stops.

Jean-Paul

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to