Again, thank you very much for your explanations and answers!
---rony
Rony G. Flatscher (mobil/e)
Am 26.06.2013 um 20:46 schrieb Rick McGuire <object.r...@gmail.com>:
> Yes, any long-lived contexts like this should be doing that sort of reference
> management. Strings are objects just like any other object. They needed to
> be managed in the same way.
>
> Rick
>
>
> On Wed, Jun 26, 2013 at 2:41 PM, Rony G. Flatscher <rony.flatsc...@wu.ac.at>
> wrote:
> Thanks a lot, Rick!
>
> In the case that a Rexx interpreter instance may be living for a long time
> (like days) and used for executing Rexx programs constantly and repeatedly,
> would it be then advisable to use DeleteLocalReference() on all RexxObject's
> one creates in native code to be sure that all RexxObjectPtr get garbage
> collected? How about RexxStrings (there are of course many such instances
> that might get created in native code) or external ooRexx functions that
> return RexxObjectPtr?
>
> ---rony
>
>
>
> On 26.06.2013 20:36, Rick McGuire wrote:
>> Nop, your analysis is correct. The return value (if is exists) is also a
>> potential memory leak. This probably doesn't show up as a problem because
>> the RoutineObjects take up a fairly substantial amount of memory.
>>
>> Rick
>>
>>
>> On Wed, Jun 26, 2013 at 2:32 PM, Mark Miesfeld <miesf...@gmail.com> wrote:
>> Thanks Rick.
>>
>> I started writing a reply based on my experiences so far, but I know you
>> could explain it better.
>>
>> I have one question based on Rony's code:
>>
>> void executeProgram(RexxThreadContext *threadContext, char *fname, char
>> *code)
>> {
>> RexxRoutineObject rro=threadContext->NewRoutine(fname, code,
>> (size_t) strlen(code));
>> RexxObjectPtr rop=threadContext->CallRoutine(rro, NULL); //
>> call the program without args
>> threadContext->ReleaseLocalReference(rro);
>> }
>>
>> In the above, he is not releasing rop, which would be the returned object
>> from CallRoutine(). But only releasing rro seemed
>> sufficient in his case to solve the problem.
>>
>> rop will also have a local reference won't it. And also be stored in table
>> of local references. That should also have a release shouldn't it? Each
>> iteration in the loop will return a new Rexx object from called routine
>> won't it? Or is there some reason why rop is not set with a local reference?
>>
>> --
>> Mark Miesfeld
>>
>>
>>
>> On Wed, Jun 26, 2013 at 11:19 AM, Rick McGuire <object.r...@gmail.com> wrote:
>> The interpreter knows nothing about any of the references you have in your C
>> code. Those are just normal pointers, so nothing happens to let the
>> interpreter know that those pointers are
>> out-of-context. The only mechanism the interpreter has available is the
>> context object used to provide the api access. That context object will
>> keep a reference to all objects returned from API calls (e.g. a "local
>> reference"). These objects are thus protected from garbage collection until
>> the context is destroyed. Method, call, and exit contexts are destroyed
>> when you return from the appropriate call out. Thread contexts for attached
>> threads will be destroyed when you detach the thread. The main thread
>> context obtained by creating an interpreter instance will only be destroyed
>> when the instance is destroyed.
>>
>> For most uses, you generally don't need to bother with releasing this. When
>> you return from the method/call/exit, the references will be released
>> automatically. However, if you are creating large
>> numbers of objects (for example, in a loop), you probably should consider
>> releasing the references. The situation you raised originally is a good
>> example, since you were causing a memory leak by never releasing the
>> references for the objects you no longer needed.
>>
>> Mark Miesfeld ran into a situation with his sql lite implementation. In his
>> situation, he was creating a large number of string objects and adding them
>> to a collection object. All of the objects he was
>> creating were added to the collection, so none of them were eligible for
>> collection, but Mark started running into memory issues because the table
>> used to keep all of the local references grew to an enormous size. The
>> solution here was to release the local references after they were added to
>> the collection. Not because the objects were no longer needed, but because
>> the local C reference to the was no longer needed.
>>
>> Rick
>>
>>
>> On Wed, Jun 26, 2013 at 1:52 PM, Rony G. Flatscher <rony.flatsc...@wu.ac.at>
>> wrote:
>> This question may be of interest for other developers as well, so
>> moving/asking it to the ooRexx
>> developer list:
>>
>> While experimenting with a little C++ program, there would be a
>> RexxRoutineObject created using
>> NewRoutine() which then got executed with CallRoutine() many thousand times.
>> While doing so memory
>> consumption constantly increased, even when placing the two statements in a
>> function of their own.
>> Therefore I thought there was a memory leak in ooRexx and filed a bug, which
>> was invalid.
>>
>> The solution Rick pointed at was to use DeleteLocalReference() on the
>> RexxRoutineObject such that it
>> can be garbage collected, and in effect, this solves the problem!
>>
>> ---
>>
>> So far, I have been thinking, that if any RexxObject went out of scope (of a
>> block, of a function)
>> it got automatically released for the garbage collector.
>>
>> Under which conditions must/should one use ReleaseLocalReference() ?
>>
>> ---rony
>>
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Windows:
>
> Build for Windows Store.
>
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Windows:
>
> Build for Windows Store.
>
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel