Hi Thomas, Your code should be correct and no memory leaks in this part. Could you provide me with some more information about what systems do you use (Linux, Windows) and a call stack of you memory leak if available. I will also try to reproduce your test.
Thanks Michael -----Ursprüngliche Nachricht----- Von: Thomas Marsh [mailto:[email protected]] Gesendet: Dienstag, 13. September 2011 16:47 An: [email protected] Betreff: RE: Etch/C Memory Consumption Hello Martijn, Thanks for your response. However, this is not the source of the leak. There is a clear etch_object_destroy in the helloworld_remote_begin_server_say_hello() which deallocates any parameters to the methods (meaning you will get a segfault if you try to reuse the parameters which now no longer point to valid memory). This usage semantic is also clearly stated in the C Binding notes >From http://incubator.apache.org/etch/c-binding-tips-tricks.html: The C Binding for Etch has the following memory management rules: Implementation side: Parameters of functions have to be destroyed by the function implementation using etch_object_destroy. Caller side: Result Objects have to be freed by the caller using etch_object_destroy. Parameters of calls will be freed by the runtime automatically. To reiterate, program memory usage in this very simple usage scenario _must_ be stable. I suspect an ever growing hash table, or some other similar culprit within the runtime. Can any of the Etch/C binding developers comment? Thanks, and best regards, --thomas -----Original Message----- From: Martijn Dashorst [mailto:[email protected]] Sent: Tuesday, September 13, 2011 7:23 AM To: [email protected] Subject: Re: Etch/C Memory Consumption And user->name = new_stringw(L"User"); will do so as well Martijn On Tue, Sep 13, 2011 at 1:52 PM, Martijn Dashorst <[email protected]> wrote: > user = new_helloworld_user() > > will allocate memory for each pass through the loop. > > Martijn > > On Mon, Sep 12, 2011 at 11:19 PM, Thomas Marsh <[email protected]> > wrote: >> Hello all, >> >> I have a question about memory consumption in the Etch/C runtime based on >> behavior we are seeing within our C client. I have modified the C >> implementation of the HelloWorld example in the distribution to run an >> infinite loop of requests: >> >> In the main() routine of helloworld_client_main.c: >> >> ... >> while (1) { >> user = new_helloworld_user(); >> user->id = 5; >> user->name = new_stringw(L"User"); >> result = remote->say_hello(remote, >> user); >> if (is_etch_exception(result)) { >> ... >> } >> printf("%S\n", result->v.valw); >> etch_object_destroy(result); >> } >> ... >> >> While running this, I see that the memory consumption of the client >> continually grows. (In this example, it grows by about 1 mB every 5 >> seconds.) I cannot see the memory leak when testing with valgrind, so it >> would suggest that the leak is in Etch managed memory which is cleared at >> exit. >> >> My understanding is that the call to remote->say_hello() should delegate >> responsibility of deallocation of the parameters to the Etch runtime, and >> that the client code is only responsible for deallocating the result object. >> The memory use should be stable within this tight loop. Can anyone comment >> on the potential cause of the memory consumption? >> >> Thanks, and best regards, >> >> --thomas >> > > > > -- > Become a Wicket expert, learn from the best: http://wicketinaction.com > -- Become a Wicket expert, learn from the best: http://wicketinaction.com
