comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam@spam.com>
Subject: Re: Deallocating records with task type fields.
Date: Sat, 10 Dec 2005 07:16:41 GMT
Date: 2005-12-10T07:16:41+00:00	[thread overview]
Message-ID: <thvmf.1629$QQ1.196@newsread3.news.pas.earthlink.net> (raw)
In-Reply-To: <1134168554.826805.70690@g49g2000cwa.googlegroups.com>

Gene wrote:
> Please consider these declarations for a task with some task local
> data:
> 
>    type Listener_Type;
> 
>    task type Listener_Task_Type(Env : access Listener_Type);
> 
>    type Listener_Type is
>       record
>          Port : Positive;
>          Executive : Listener_Task_Type(Listener_Type'Access);
>       end record;
> 
> With this, the executive task has access to the task local environment
> exemplified here by a port number.
> 
> Here are the questions:
> 
> 1.  Is this a good idiom for implementing task local data, or is there
> some other preferable method?

For a case like this, I'd probably suggest

task type Listener (Port : Positive);

More generally, how do you create an object of Listener_Type and ensure that you 
assign a value to its Port component before its Executive accesses that component?

An alternative is to not embed the task in its data:

task type T (Environment : access Environment_Data);

This requires that you have the data available when you create the task object.

> 2.  As I read the ALRM it is incorrect to deallocate a Listener_Type
> object until the Executive task has exited.  What is a good idiomatic
> way for the Executive to deallocate its own task local storage just
> before it exits and without causing a race condition?  [The only ways I
> can come up with seem like excessive machinery.]

The best way is not to use allocation, and thus not need deallocation.

If you do need to allocate the data, you can use the access type for that 
instead of an anonymous access type:

task type T (Environment : Data_Ptr);

and the task could make a copy of Environment and deallocate that. I would not 
generally advise such an approach.

-- 
Jeff Carter
"I like it when the support group complains that they have
insufficient data on mean time to repair bugs in Ada software."
Robert I. Eachus
91



  reply	other threads:[~2005-12-10  7:16 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-12-09 22:49 Deallocating records with task type fields Gene
2005-12-10  7:16 ` Jeffrey R. Carter [this message]
2005-12-10 11:45   ` Simon Wright
2005-12-10 14:10 ` Dmitry A. Kazakov
2005-12-11  4:06   ` Gene
2005-12-11 11:50     ` Dmitry A. Kazakov
2005-12-12 11:32       ` Alex R. Mosteo
2005-12-12 18:30         ` Pascal Obry
2005-12-13 10:22           ` Alex R. Mosteo
2005-12-12 22:03     ` Randy Brukardt
2005-12-11  5:02   ` Gene
replies disabled

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