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=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "J-P. Rosen" Newsgroups: comp.lang.ada Subject: Re: Finalization of library level tasks Date: Mon, 16 Apr 2018 10:32:59 +0200 Organization: Adalog Message-ID: References: <702e2422-a93f-4200-9749-5122c3d0f899@googlegroups.com> NNTP-Posting-Host: vtydEJu0RziDZHka7ZZ6bg.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 X-Notice: Filtered by postfilter v. 0.8.3 Openpgp: preference=signencrypt Content-Language: fr Xref: reader02.eternal-september.org comp.lang.ada:51541 Date: 2018-04-16T10:32:59+02:00 List-Id: Le 16/04/2018 à 10:13, Dmitry A. Kazakov a écrit : > You would terminate descendants (grandchildren) from the rendezvous with > the child's Terminate: > >    select >       ... >    or terminate >       do -- Hidden rendezvous body >         ... terminate all descendants >       end Terminate; >    else >       ... spawn new descendants >    end select; That's not what I mean. If you have both "terminate" and "select", if you select "terminate" (and all children are on a select with terminate), then you can terminate and you were right to select that branch. But if you select "else", then you can wake up other tasks that might in turn call your entries, so you were right not to select "terminate". That's what I call undecidable. >>> Anyway since T'Callable seems working, there is no need to use the >>> terminate alternative ever. >>> >> No, T'Callable becomes false AFTER the terminate has been selected. > > So GNAT implementation is wrong and this one is illegal? > >    task body T is >    begin >       loop >          exit when not T'Callable; >          ... -- Do something >       end loop; >    end T; I don't know what Gnat is doing, but while T is normally active, T'Callable is True. This is clearly an infinite loop. -- J-P. Rosen Adalog 2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00 http://www.adalog.fr