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: Thu, 26 Apr 2018 10:56:03 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <702e2422-a93f-4200-9749-5122c3d0f899@googlegroups.com> <04f19a56-7fab-416e-8ec0-b9a73e239e90@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: 7bit 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:51726 Date: 2018-04-26T10:56:03+02:00 List-Id: On 26/04/2018 02:04, Randy Brukardt wrote: > "Dmitry A. Kazakov" wrote in message > news:pb74sr$1cmf$1@gioia.aioe.org... >> On 18/04/2018 10:52, Egil H H wrote: >>> Undefined? >>> >>> 9.9(2), "a task is callable unless it is completed or abnormal" >>> 9.3(5), "A task is said to be completed when the execution of its >>> corresponding task_body is completed" >> >> OK, it is defined enough to confirm that T'Callable cannot be used to >> break finalization deadlock. > > Of course it can: you test T'Callable of your parent task, *not* of > yourself. If that parent is the environment task, use the > Task_Identification version. No, because the parent task is not going to terminate. The problem is to test if the current task is awaited to terminate in order to have an equivalent of: loop select terminate; else null; end select; -- Do a portion of work end loop; There is no solution to this below the library level where the environment task hack works. Under the library level an access to the task must be used *and* this pointer type must be declared one level up the future master of the task. I.e. it cannot be local in the scope where the object creating the task lives. This will deadlock as mandated by the RM. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de