[
https://issues.apache.org/jira/browse/PROTON-1709?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16993793#comment-16993793
]
Andrew Stitcher commented on PROTON-1709:
-----------------------------------------
Hmm, yes this is a rather serious API flaw.
I think the simplest solution is to allow ApplicationEvent to take an EventType
object as well as a string so that the application can create an EventType and
continue using it.
Alternatively ApplicationEvent could keep a static dictionary of
string->EventTypes instead of creating a new EventType for every new
ApplicationEvent.
Actually probably doing both of these is a good plan.
> [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]