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 09:25:25 +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: 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 X-Notice: Filtered by postfilter v. 0.8.3 Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:51573 Date: 2018-04-18T09:25:25+02:00 List-Id: On 18/04/2018 00:00, Robert A Duff wrote: > "Dmitry A. Kazakov" writes: > >> task body T is >> begin >> while T'Callable loop >> ... >> end loop; >> end T; >> >> must work, GNAT is correct, I am happy. > > I'm not sure what you mean by "work". GNAT correctly > compiles that into an infinite loop, as J-P explained. > Here's a complete example: > > with Text_IO; use Text_IO; > package Foo is > task T; > end Foo; > > package body Foo is > task body T is > begin > while T'Callable loop > Put_Line("Hello"); > delay 2.0; > end loop; > end T; > end Foo; > > procedure Foo.Main is > begin > null; > end Foo.Main; > > This prints "Hello" every 2 seconds until you get > bored and kill it. In my case it ends. So it is "fixed", unfortunately. It was not that useful anyway because it would not work for nested tasks which have exactly same problem in the case when the master is at the same level. It is not so notorious because programmers tend to allocate tasks dynamically and declare the corresponding pointer at the library level. So the finalization deadlock does not happen. > I think perhaps you wanted to query Callable on the environment > task, not T. If so, please post a complete example, and say > what GNAT is doing, and why you think that's wrong (or right?). I will post an example to augment encapsulated task pattern in order to work around language idiosyncrasies. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de