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: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Finalization of library level tasks Date: Tue, 17 Apr 2018 16:47:10 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <702e2422-a93f-4200-9749-5122c3d0f899@googlegroups.com> NNTP-Posting-Host: MyFhHs417jM9AgzRpXn7yg.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.8.3 Xref: reader02.eternal-september.org comp.lang.ada:51557 Date: 2018-04-17T16:47:10+02:00 List-Id: On 17/04/2018 16:08, J-P. Rosen wrote: > Le 17/04/2018 à 14:47, Dmitry A. Kazakov a écrit : >> I don't understand the meaning of "revive". The meaning of >> >>    select >>       terminate; >>    else >>       null; >>    end select; >> >> is crystal clear: continue if no master did request termination else >> continue. Again, I thought that T'Callable were there to determine if a >> master wants the task to terminate. > It's just that your mental model of 'Callable and Terminate is not the > one of Ada. A master does not require termination from its dependent > tasks: it checks (recursively) if all the dependent tasks are either > already terminated or similarly waiting on a select-with-terminate. If > yes, the whole family terminates simultaneously. That simply cannot work. The task (or task manager) must know if the terminate alternative can be selected. That depends on the master's state. Master or something on its behalf must tell the task that it must start selecting terminate alternatives. > When a master is waiting for dependent tasks to terminate (at its end, > NOT if on a select-with-terminate), it is not yet Terminated, but it is > no more Callable. In that case task body T is begin while T'Callable loop ... end loop; end T; must work, GNAT is correct, I am happy. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de