[ 
https://issues.apache.org/jira/browse/PROTON-1071?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15046671#comment-15046671
 ] 

Gordon Sim commented on PROTON-1071:
------------------------------------

In examples/python/reactor/cat.py a selectable is configured to use a normal 
file that is opened for reading. This is preceded by the comment: '# We can 
configure a selectable with any file descriptor we want.'

I don't doubt that you are correct in all your points about the windows 
implementation, but I don't agree that EventInjector violates any clearly 
defined model or that it works on posix only by fortuitous accident. It seems 
to me that the design as originally conceived did not take windows into 
account. If the implication is that the reactor - proton's event loop - can 
only be used with proton objects and operations, that to me seems like a 
serious limitation.

All that said, focusing solely on the functionality provided at present by 
EventInjector in python, what would be your suggestion for a solution that 
works on both windows and posix?. Preserving the API in python would be highly 
desirable but not mandatory. 

> EventInjector hangs on Windows
> ------------------------------
>
>                 Key: PROTON-1071
>                 URL: https://issues.apache.org/jira/browse/PROTON-1071
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-c, python-binding
>    Affects Versions: 0.11
>         Environment: Windows
>            Reporter: Ken Giusti
>            Assignee: Cliff Jansen
>             Fix For: 0.12.0
>
>
> I added a new reactor test that exercises the python-proton ApplicationEvent 
> and EventInjector classes:
> proton_tests.reactor.ApplicationEventTest.test_application_events
> See tests/python/proton_tests/reactor.py
> This test passes on linux, but hangs when run on Windows.
> Poking around a bit, I suspect the problem may be in the Windows selector 
> code.  Description:
> The EventInjector/ApplicationEvent classes provide a way to trigger events 
> from threads external to the reactor main loop.  See 
> proton-c/bindings/python/proton/reactor.py.  A pipe is used to wake up the 
> reactor when a new event is sent to the reactor (see reactor.py in the python 
> bindings).  The EventInjector's trigger method puts the event on a queue and 
> writes to a pipe to wake up the reactor.  The on_selectable_readable callback 
> in the EventInjector is called on the reactor thread to get the event off the 
> queue and clear the pipe.
> On windows it appears as if the EventInjector selectable is made "readable" 
> even though nothing has been written to the pipe.  This causes the os.read() 
> call in the on_selectable_readable() callback to hang.
> Best I can tell the windows selector code doesn't work properly with a pipe.  
> The pn_selector_next() function is returning a read event on the pipe's read 
> descriptor even though the pipe is empty.  But I'm not familiar with the 
> window's selector implementation, so this is a best guess.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to