comp.lang.ada
 help / color / mirror / Atom feed
From: Dmitry A. Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: Overriding discriminants perplexes GNAT 3.14p
Date: Tue, 24 Sep 2002 11:40:20 +0200
Date: 2002-09-24T11:40:20+02:00	[thread overview]
Message-ID: <s4a0pusic326ljujp63omusdur9iju63kj@4ax.com> (raw)
In-Reply-To: b4682ab7.0209231318.2ba6c6ef@posting.google.com

On 23 Sep 2002 14:18:08 -0700, adam@irvine.com (Adam Beneschan) wrote:

>Dmitry A.Kazakov <mailbox@dmitry-kazakov.de> wrote in message news:<amil7u$6897n$1@ID-77047.news.dfncis.de>...
>> Adam Beneschan wrote:
>
>> > See http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00148.TXT?rev=1.2
>> > for the official word on the matter.
>> 
>> Maybe I have missed something, it is a rather lenghty document, but it only 
>> clarifies a rather obvious idea that an external requeue should be made in 
>> a safe way to avoid race condition. So the original protected action 
>> lingers for awhile until requeueing is done.
>
>Here's what it actually says, right up front: "The requeue of a
>protected entry to an entry in another protected object requires the
>protected action resulting from the requeue to be completed before the
>original protected action completes".
>
>When an external requeue is made to an open entry, 9.5.4(11) says that
>a protected action is started on the target object and proceeds as for
>a normal entry call.  If the entry is open (as in your example code),
>the protected action consists of executing the entry body and
>servicing the entry queues, and then the protected action is complete
>(9.5.3(8,10,18)).  If the entry is closed, the entry call (i.e. the
>one caused by the requeue, in your code) is queued, and the protected
>action completes.
>
>The summary of AI-00148, which I quoted above, says that when an entry
>in protected object P1 does a requeue to protected object P2, the
>protected action on P2 must be completed (including, if the entry in
>P2 is *open*, executing the body of that entry and processing any
>other queued calls in P2 that can now execute) before the protected
>action on P1 is completed.  In other words, they nest.
>
>Note that the protected action does *not* include waiting on a queue. 
>If the external requeue is to an entry whose barrier is closed, the
>nested protected action queues the entry and then is complete,
>allowing the protected action on the first protected object to
>complete.  The protected action on the requeueing object does *not*
>remain in effect indefinitely until the barrier becomes open.  It
>completes as soon as the requeued entry call gets put on the queue. 
>This could be the source of your misunderstanding.
>
>> Does it say that the protected action continues and locks the original 
>> object until any consequent protected action and actions it in turn might 
>> invoke complete?
>
>Yes.
>
>> It would a disaster. Consider a protected object serving as a scheduler. It 
>> routes requests via requeue to numerous other protected objects and tasks 
>> that would then serve the requests. It would be simply impossible to do 
>> that if the scheduler would remain locked until a request is finally served 
>> by another object or task.
>
>See above.  I have a feeling this is due to your misunderstanding of
>what happens in the "protected action" when a requeue is to a closed
>entry.

According to your description the scheduler indeed will be *locked* if
the entry serving the request is *open* when a requeue to it is made.
If the entry is closed then it will not. [It seems that it will not be
locked if the entry is of a task]. An excellent pitfall!

Then whether a circular requeue is a bounded error or not depends
exclusively on the state of barriers! And there is no other way than a
requeue to influence the barries of another object from a protected
action. Even better!

---
Regards,
Dmitry Kazakov
www.dmitry-kazakov.de



  reply	other threads:[~2002-09-24  9:40 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-19  2:32 Overriding discriminants perplexes GNAT 3.14p Dmitry A.Kazakov
2002-09-18 16:45 ` Stephen Leake
2002-09-19 21:34   ` Dmitry A.Kazakov
2002-09-19 15:51     ` Stephen Leake
2002-09-20 22:06       ` Dmitry A.Kazakov
2002-09-20 12:29         ` Stephen Leake
2002-09-22  8:43           ` Dmitry A.Kazakov
2002-09-22 13:32             ` Georg Bauhaus
2002-09-23  5:41               ` Dmitry A.Kazakov
2002-09-23 12:41                 ` Georg Bauhaus
2002-09-24  1:38                   ` Dmitry A.Kazakov
2002-09-23 15:33             ` Stephen Leake
2002-09-24  8:35               ` Dmitry A. Kazakov
2002-09-19 18:22     ` Adam Beneschan
2002-09-20 22:06       ` Dmitry A.Kazakov
2002-09-20 16:00         ` Adam Beneschan
2002-09-22  8:43           ` Dmitry A.Kazakov
2002-09-23 21:18             ` Adam Beneschan
2002-09-24  9:40               ` Dmitry A. Kazakov [this message]
2002-09-21 13:01     ` Simon Wright
2002-09-18 16:46 ` Mark Johnson
2002-09-19 21:34   ` Dmitry A.Kazakov
2002-09-19 16:17     ` Stephen Leake
2002-09-19 20:02       ` tmoran
2002-09-20 21:10       ` Dmitry A.Kazakov
2002-09-21 12:56       ` Simon Wright
2002-09-18 16:49 ` Frank J. Lhota
2002-09-19 21:34   ` Dmitry A.Kazakov
2002-09-18 17:17 ` Per Sandbergs
2002-09-19  8:51 ` Thierry Lelegard
  -- strict thread matches above, loose matches on Subject: below --
2002-09-19  9:08 Grein, Christoph
replies disabled

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