comp.lang.ada
 help / color / mirror / Atom feed
From: "Dr. Michael Paus" <paus@ib-paus.com>
Subject: Re: Question concerning usage of gnatmem
Date: Sun, 22 Sep 2002 10:52:57 +0200
Date: 2002-09-22T08:52:58+00:00	[thread overview]
Message-ID: <amk0da$dqm$1@news.online.de> (raw)
In-Reply-To: usn04q2y5.fsf@gsfc.nasa.gov

Stephen Leake wrote:
> "Dr. Michael Paus" <paus@ib-paus.com> writes:
> 
> 
>>Stephen Leake wrote:
>>
>>>"Dr. Michael Paus" <paus@ib-paus.com> writes:
>>>
>>>
>>>>When I run the program I have to stop it via Cntrl-C because this software
>>>>was designed to run forever and there is no other way to stop it. Does this
>>>>lead to a corrupt output file?
>>>
>>>In general, I suspect the answer is "yes".

I looked at this issue a little bit closer and I am sure now that this is no
problem. The file is written sequentielly and the processing can stop when there
is no more valid input.

>>>
>>>
>>>>If the output is likely to be corrupt is there any other way to get
>>>>the memory usage until the time when the program is stopped?
>>>
>>>Probably not. Modify your code; it probably has a top-level forever
>>>loop. Change it
>>>to run 1000 times, or whatever produces useful results.
>>
>>Well, if it were so easy I would have done that already :-) The program
>>consists of about 30 tasks all waiting for some input to process and
>>some of them listening on sockets to receive some data from external
>>sources. It is not so easy to force this program to terminate without
>>major changes to the code. 
> 
> 
> As I recall, what you are doing is trying to find out if there is a
> memory leak. That can be done by running each piece of the program
> separately, in a unit test. If each unit does not leak, the program as
> a whole does not leak.

No, I am not trying to find memory leaks. I am just trying to find the
maximum storage used and where it is used. That's exactly what gnatmem
is designed for.

> Hmm, maybe you were trying to find out the max memory usage of the
> program. That's harder to do in pieces, since it depends on the
> pattern of use. If you really need to know that, you'll need to define
> your own storage pools, that allow you to query their current usage.
> Then add a command to one of the tasks to dump that information.

Gnatmem is doing that in a much simpler way.

>>If I remember correctly there was a discussion here recently on how
>>to stop an Ada program. The solution, if there was any, would be
>>handy here now.
> 
> 
> Abort the environment task. That's supposed to also abort all
> dependent tasks, but it may not work if they are waiting on sockets
> (since that's an OS issue, not an Ada issue). Give it a try.
> 
> 
> Perhaps you can add a "please terminate" message to each task? Maybe
> that's what you meant by "major changes to the code".
> 

This is all not so easy if the tasks are involved in blocking IO calls.

Actually I have solved my problem already with the help of gnatmem. The
problem seems to be that gnatmem on Linux is broken. I have written a
simple test program which terminates correctly by itself and even for
that I do not get a proper backtrace. The global allocation information
though seems to be correct and that's the most important information for
me.

Michael






      reply	other threads:[~2002-09-22  8:52 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-19 12:02 Question concerning usage of gnatmem Dr. Michael Paus
2002-09-19 16:20 ` Stephen Leake
2002-09-19 16:38   ` Dr. Michael Paus
2002-09-20 12:07     ` Stephen Leake
2002-09-22  8:52       ` Dr. Michael Paus [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox