comp.lang.ada
 help / color / mirror / Atom feed
From: "Alex R. Mosteo" <alejandro@mosteo.com>
Subject: Re: Private or public task ?
Date: Mon, 08 Feb 2010 10:55:15 +0100
Date: 2010-02-08T10:55:15+01:00	[thread overview]
Message-ID: <7ta5ekF4jiU1@mid.individual.net> (raw)
In-Reply-To: 38a0a3f9-b4a0-48f3-98c9-63b03fe03aca@q4g2000yqm.googlegroups.com

Hibou57 (Yannick Duchêne) wrote:

> Hi Jeffrey, nice to meet you again,
> 
> On 5 fév, 22:38, "Jeffrey R. Carter" <spam.jrcarter....@spam.acm.org>
> wrote:
>> Technically this is a bounded error: Ada.Text_IO.Put* operations are
>> potentially blocking, and should not be called from a protected
>> operation.
> I did not ever suspected such a requirement. Transitive blocking is
> not allowed ?
> 
> So, if blocking operation are not allowed from a protected type,
> clients of a given operation have to know it weither or not it's
> potentially blocking, and so, this fact must be stated in public part
> of specifications, so then, the protected and tasked aspect of a
> method must be stated in specifications and I suppose it's not a good
> idea to make it private.

I have had some headaches not long along because of potentially blocking 
operations. The short conclusion is that as long as you don't try anything 
strange, you'll do well. By strange I mean things that may seem "clever" at 
some point like calling a task from a protected or so.

Past versions of gnat where indulging about this, there's now a pragma that 
won't allow it and that I recommend to use; you'll save further problems 
with deadlocks. I think is pragma Detect_Blocking.

So, if your type is encapsulating a hidden call to a task entry, it would be 
advisable to document it in the call, because this indeed can raise an 
exception at runtime if called from a protected op. I think this is a 
recommendation, but a bounded error in any case. The above pragma enforces 
its detection.

However, I don't think it's recommended design to call from protected ops to 
foreign, implementation-unknown, subprograms. Protected calls should 
encapsulate something as well defined and narrow as possible.

I make extensive use of protected and task types generally without issue; my 
problem was that I had to quickly hack a solution for a convoluted tasking 
subsystem and I was frankly abusing the design. In general, sticking to the 
client-server model for tasks/protected objects covers 99% of use cases and 
it's totally safe.

> Wrong or right assumptions ?
> 
>> This should not happen. Did you actually experience this?
> No, I did not experience it, this was just my imagination : I knew a
> task may completes at its own discretion. Thus if may possibly
> completes too much soon if its completion condition is not well
> designed.
> 
> I will have to check the RM, but I'm pretty sure a completed task
> cannot handle any request any more (at least, this seems to be a
> reasonable assumption to me, but I will still have to check...).

At first I also was reticent of terminate parts, but this is really one of 
these nice aspects of Ada where something apparently complex is done for you 
by the language :)



  reply	other threads:[~2010-02-08  9:55 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-05 20:54 Private or public task ? Hibou57 (Yannick Duchêne)
2010-02-05 20:56 ` Hibou57 (Yannick Duchêne)
2010-02-05 21:38 ` Jeffrey R. Carter
2010-02-05 21:53   ` Hibou57 (Yannick Duchêne)
2010-02-08  9:55     ` Alex R. Mosteo [this message]
2010-02-08 10:02     ` Jean-Pierre Rosen
2010-02-08 17:28     ` Maciej Sobczak
2010-02-09  8:43       ` Dmitry A. Kazakov
2010-02-09 12:07       ` Hibou57 (Yannick Duchêne)
2010-02-09 14:26         ` Jean-Pierre Rosen
2010-02-09 18:17           ` Hibou57 (Yannick Duchêne)
2010-02-10  8:17           ` Maciej Sobczak
2010-02-10  8:29             ` Hibou57 (Yannick Duchêne)
2010-02-10  8:40               ` Martin
2010-02-10 11:44                 ` Jean-Pierre Rosen
2010-02-10 12:51                   ` Martin
2010-02-10 16:17                 ` Robert A Duff
2010-02-10 11:38             ` Jean-Pierre Rosen
2010-02-13 11:09           ` Dmitry A. Kazakov
2010-02-09 15:20         ` Robert A Duff
2010-02-09 18:26           ` Hibou57 (Yannick Duchêne)
2010-02-09 14:44       ` Alex R. Mosteo
2010-02-09 23:38   ` mkasun
2010-02-09 23:51     ` Robert A Duff
2010-02-10  0:01     ` Jeffrey R. Carter
2010-02-05 21:40 ` Dmitry A. Kazakov
2010-02-05 22:09   ` Hibou57 (Yannick Duchêne)
2010-02-05 22:57     ` sjw
2010-02-06  2:20   ` Hibou57 (Yannick Duchêne)
2010-02-06  2:23     ` Hibou57 (Yannick Duchêne)
2010-02-06  3:29     ` Jeffrey R. Carter
replies disabled

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