!standard 9.10(6.1/1) 07-10-24 AI05-0072-1/01 !class binding interpretation 07-10-24 !status ARG Approved 9-0-0 06-11-10 !status work item 07-10-24 !status received 07-10-23 !priority Low !difficulty Easy !qualifier Error !subject Termination only signals 'Terminated when it is True !summary A task A signals another task B only when B reads A'Terminated as True (or the equivalent call to Ada.Task_Identification). !question Section 9.10 defines the notion of one action "signaling" another. If A1 "signals" A2 then we know that A1 precedes A2. 9.10(6.1/1) has added task termination to this list, where A1 is termination, and A2 is the evaluation of T'Terminated (or the equivalent call on Is_Terminated). But this is only a "signal" if the evaluation returns True. The wording should reflect that. !recommendation (See Summary.) !wording Modify 9.10(6.1/1) as follows: * If A1 is the termination of a task T, and A2 is either {an}[the] evaluation of the expression T'Terminated {that results in True,} or a call to Ada.Task_Identification. Is_Terminated with an actual parameter that identifies T {and a result of True} (see C.7.1). !discussion If T'Terminated returns False, that says nothing interesting about the state of T. !corrigendum 9.10(6.1/1) @drepl @xbullet @dby @xbullet !ACATS Test This is testable, but the ARG voted not to test it in AI95-00118 (which originated the wording that this AI is correcting). Note that a test is unlikely to detect any errors - even an implementation which gets this wrong probably would pass a test like the one in the example of AI95-00118. !appendix From: Tucker Taft Sent: Tuesday, October 23, 2007 3:35 PM Section 9.10 defines the notion of one action "signaling" another. If A1 "signals" A2 then we know that A1 precedes A2. 6.1/1 has added task termination to this list, where A1 is termination, and A2 is the evaluation of T'Terminated (or the equivalent call on Is_Terminated). But this is only a "signal" if the evaluation returns *True*. So 6.1/1 should probably be revised as follows: * If A1 is the termination of a task T, and A2 is either the evaluation of the expression T'Terminated {that results in True,} or a call to Ada.Task_Identification. Is_Terminated with an actual parameter that identifies T {and a result of True} (see C.7.1). **************************************************************** From: Tucker Taft Sent: Tuesday, October 23, 2007 3:46 PM Actually, the wording makes more sense if we replace "either the evaluation of ..." with "either *an* evaluation of ..." since the next part says "or *a* call ...". Pick those nits! ****************************************************************