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: Wed, 18 Apr 2018 11:58:52 +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:51580 Date: 2018-04-18T11:58:52+02:00 List-Id: 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. If not at the library level then only way seems to be a helper task at the same level. After second thought no shared variable and a controlled object is needed in the helper task. The required construct: select terminate; -- Terminate if asked else null; end select; can be emulated using Callable on the helper task: task Helper is entry Never; end Helper; task body Helper is begin select accept Never; or terminate; end select; end Helper; task body Worker_Task is begin while Helper'Callable loop ... -- Do something end loop; end Worker_Task; When Helper and Worker_Task have same master then Worker_Task can break finalization deadlock by looking at the Helper. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de