comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: 4 beginner's questions on the PL Ada
Date: Fri, 09 Aug 2013 20:48:58 -0400
Date: 2013-08-09T20:48:58-04:00	[thread overview]
Message-ID: <wccy58a4bgl.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 92c32083-74f2-4aaa-94cc-9c9e882bfdf4@googlegroups.com

This is getting a bit esoterical -- beyond the simple questions the
OP was asking about how to print out the Image of a task!
But anyway:

Adam Beneschan <adambeneschan@aol.com> writes:

> But there's another factor: if you allocate a task (or a record
> containing a task), using Unchecked_Deallocation (or automatic memory
> reclamation) won't terminate the task.

Well, there's no notion in Ada of "to terminate a task" (as in "task T1
terminates T2").  Tasks terminate themselves.  Normally, when they're
done.  In the case of "terminate" alternatives of select statements, a
task signals that it is in a ready-to-terminate state, and then gets
told to go ahead and terminate itself.  In the case of "abort", the task
is told to terminate itself as soon as possible after it is out of any
abort-deferred region.

In no case does a task get terminated from outside itself.
And that's as it should be.  Anything else is just asking for
all sorts of race conditions.

So I claim it makes no sense at all for Unchecked_Deallocation of an
object containing tasks to terminate those tasks.  And I don't think
it makes sense for U_D to abort those tasks (and then what? wait for
them to terminate themselves?  Or just go ahead, and hope they do so?).

>...That's just the way the
> language authors decided.  This discussion has come up before, and
> it's surprised other people that a task will still run after
> Unchecked_Deallocation has been used on it, but there were reasons why
> things are the way they are.  I don't remember the reasons, though.

I think it would make sense for U_D to await the termination of those
tasks, and then free up the memory.

But the actual Ada semantics are admittedly weird:  U_D on an object
containing running tasks doesn't free all the memory, but it expresses
a hope that the memory will be freed when the tasks terminate.
GNAT was recently changed so that "hope" comes true, but it's not
required, and older versions of GNAT, and probably other compilers,
just leak memory if you do U_D on running tasks.

- Bob

  parent reply	other threads:[~2013-08-10  0:48 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-09 16:50 4 beginner's questions on the PL Ada Emanuel Berg
2013-08-09 17:09 ` Adam Beneschan
2013-08-09 17:16   ` Emanuel Berg
2013-08-09 17:46     ` Alan Jump
2013-08-09 18:10       ` Emanuel Berg
2013-08-09 19:01   ` Randy Brukardt
2013-08-09 21:38     ` Emanuel Berg
2013-08-09 22:00       ` Jeffrey Carter
2013-08-09 22:16         ` Emanuel Berg
2013-08-10  0:39           ` Anh Vo
2013-08-10  1:24             ` Emanuel Berg
2013-08-10  6:16               ` Simon Wright
2013-08-10 12:13                 ` Emanuel Berg
2013-08-10 17:12               ` Mike H
2013-08-10 17:53                 ` Emanuel Berg
2013-08-10 19:50                   ` Dennis Lee Bieber
2013-08-10 22:23                     ` Emanuel Berg
2013-08-11  7:12                       ` Georg Bauhaus
2013-08-11 12:44                         ` Emanuel Berg
2013-08-11 21:12                           ` Bill Findlay
2013-08-11 21:22                             ` Emanuel Berg
2013-08-12 17:39               ` Anh Vo
2013-08-12 18:15                 ` Anh Vo
2013-08-12 19:57                 ` Simon Wright
2013-08-12 20:13                   ` Anh Vo
2013-08-10  0:52           ` Jeffrey Carter
2013-08-12 19:47         ` Randy Brukardt
2013-08-09 22:08       ` Robert A Duff
2013-08-09 22:23         ` Emanuel Berg
2013-08-09 22:36           ` Robert A Duff
2013-08-09 22:42             ` Emanuel Berg
2013-08-09 23:48               ` Robert A Duff
2013-08-09 23:50                 ` Emanuel Berg
2013-08-09 23:56                 ` Emanuel Berg
2013-08-10  0:44                 ` Jeffrey Carter
2013-08-10  0:51                   ` Robert A Duff
2013-08-09 22:47             ` Alan Jump
2013-08-09 23:33               ` Adam Beneschan
2013-08-09 23:43                 ` Alan Jump
2013-08-10  0:19                   ` Robert A Duff
2013-08-10  0:52                   ` Jeffrey Carter
2013-08-10  0:48                 ` Robert A Duff [this message]
2013-08-09 23:40               ` Robert A Duff
2013-08-09 23:25       ` Dennis Lee Bieber
2013-08-09 18:29 ` Jeffrey Carter
2013-08-09 18:51   ` Adam Beneschan
2013-08-09 19:05     ` Jeffrey Carter
2013-08-09 18:35 ` Simon Wright
2013-08-09 23:21 ` Dennis Lee Bieber
2013-08-09 23:48   ` Emanuel Berg
2013-08-10  2:45     ` Dennis Lee Bieber
2013-08-10  3:33       ` Emanuel Berg
2013-08-10 14:57         ` Shark8
2013-08-10 17:43           ` Emanuel Berg
2013-08-10 17:55             ` Emanuel Berg
2013-08-10 23:15             ` Simon Clubley
2013-08-11 12:16               ` Emanuel Berg
2013-08-12 18:07               ` Adam Beneschan
2013-08-11  0:34             ` Shark8
2013-08-11 12:42               ` Emanuel Berg
2013-08-11 13:24                 ` Peter C. Chapin
2013-08-11 13:37                   ` Emanuel Berg
2013-08-11 15:15                   ` Mike H
2013-08-12 17:56           ` Adam Beneschan
2013-08-10  6:03       ` Jeffrey Carter
2013-08-12 17:17         ` Eryndlia Mavourneen
2013-08-12 17:27           ` Jeffrey Carter
2013-08-10 12:31 ` Emanuel Berg
2013-08-10 12:37   ` Emanuel Berg
2013-08-10 12:52     ` Emanuel Berg
replies disabled

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