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: Tue, 17 Apr 2018 13:16:56 +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:51552 Date: 2018-04-17T13:16:56+02:00 List-Id: Le 16/04/2018 à 17:26, Dmitry A. Kazakov a écrit : > The only place RM explains 'Callable is in ARM C.7.1:riddle: > > "(10.a.1/1):Ramification: {8652/0115} {AI95-00206-01} These routines can > be called with an argument identifying the environment task. > Is_Terminated will always be False for such a call, but Is_Callable > (usually True) could be False if the environment task is waiting for the > termination of dependent tasks. Thus, a dependent task can use > Is_Callable to determine if the main subprogram has completed." > > At least for the environment task 'Callable is defined this (reasonable) > way. It seems that GNAT uses this definition for all task. The environment task calls the main subprogram. Therefore, after the main subprogram has returned, the environment task may be waiting for other tasks to terminate, and is thus no more callable. But I don't see how this relates to your example. One thing to keep in mind is the meaning of "or terminate": it means that no task could possibly call an entry of the task, and therefore that the task is blocked forever. In this case, it is better to terminate it. If you had an else part, there is a way to revive it, and therefore it cannot be terminatable. -- 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