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

ASF subversion and git services commented on PROTON-1709:
---------------------------------------------------------

Commit 427621bf19e84f6fba137b763d8dad25554377b0 in qpid-proton's branch 
refs/heads/master from Andrew Stitcher
[ https://gitbox.apache.org/repos/asf?p=qpid-proton.git;h=427621b ]

PROTON-1709: [Python] Fix ApplicationEvent to avoid always creating a new 
EventType
- ApplicationEvent memoizes EventTypes created so it only creates one for any 
one
  typename string.
- ApplicationEvent accepts EventType as its first parameter so application can 
create
  their own EventType.


> [python] ApplicationEvent causing memory growth
> -----------------------------------------------
>
>                 Key: PROTON-1709
>                 URL: https://issues.apache.org/jira/browse/PROTON-1709
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: python-binding
>    Affects Versions: proton-c-0.18.1
>            Reporter: Xin Chen
>            Assignee: Andrew Stitcher
>            Priority: Major
>              Labels: leak
>
> ApplicationEvent creates a new EventType object in the constructor. The 
> EventType object adds itself to the TYPES dict always, even for the same 
> typename. There is no way for the application to avoid this by providing an 
> EventType object directly. Repro code below:
> {code:java}
> import threading
> from proton.reactor import Container, ApplicationEvent, EventInjector
> class Program:
>     def __init__(self, injector):
>         self.injector = injector
>     def on_reactor_init(self, event):
>         event.reactor.selectable(self.injector)
>     def on_hello(self, event):
>         print(event.subject)
>     def on_done(self, event):
>         event.subject.stop()
> e = EventInjector()
> r = Container(Program(e))
> t = threading.Thread(target=r.run)
> t.start()
> for i in range(1, 10000000):
>     e.trigger(ApplicationEvent("hello", subject=str(i)))
> e.trigger(ApplicationEvent("done", subject=r))
> t.join()
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to