From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII X-Google-Thread: 103376,25ecb78615e0f778 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2004-01-23 06:53:02 PST Path: archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.mathworks.com!nntp.TheWorld.com!not-for-mail From: Robert A Duff Newsgroups: comp.lang.ada Subject: Re: protected objects and external call Date: 23 Jan 2004 09:53:00 -0500 Organization: The World Public Access UNIX, Brookline, MA Message-ID: References: <5f59677c.0401220851.3c2922b0@posting.google.com> <72oqub.mka.ln@skymaster> NNTP-Posting-Host: pip1-5.std.com Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: pcls4.std.com 1074869581 16785 192.74.137.185 (23 Jan 2004 14:53:01 GMT) X-Complaints-To: abuse@TheWorld.com NNTP-Posting-Date: Fri, 23 Jan 2004 14:53:01 +0000 (UTC) User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 Xref: archiver1.google.com comp.lang.ada:4714 Date: 2004-01-23T09:53:00-05:00 List-Id: "Jean-Pierre Rosen" writes: > "Evangelista Sami" a �crit dans le message de news:5f59677c.0401220851.3c2922b0@posting.google.com... > > hi all > > > > in RM-9.5.1 we see there is a difference between external and internal > > protected calls. Let's consider the following code > > ---------------------------------- > > protected type Prot is > > procedure P; > > end Prot; > > My_Prots : array (1..10) of Prot; > > > > protected body Prot is > > > > procedure P is > > begin > > ..... > > My_Prots(5).P; > > .... > > end; > > > > end Prot; > > ---------------------------------- > > > > Is the call "My_Prots(5).P" always considered as an external call or > > is it an internal call if the object on which is executed the > > procedure is My_Prots(5) ? > > > It is an external call (in the general case, you cannot know > statically whether it's truly external or not). Right. > This means that you'll try to grab the lock of the PO again, and this > can lead to dead-lock. Right. > This is why it is considered a potentially blocking operation, and as > such disallowed in a protected operation. No, I don't think that's quite right. Entry calls are potentially blocking, and you're not supposed to call them from inside a protected procedure. (Actually, it's a bounded error, and some compilers allow it.) But a protected procedure can call another protected procedure with an external call. It's up to the programmer to make sure it's not the same protected object. (You also have to obey the priority ceiling rules.) In other words, merely grabbing the lock of a PO is *not* considered blocking or potentially blocking in Ada, and no queue-ing need be involved. - Bob