X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fada%2Fs-taprop-vms.adb;fp=gcc%2Fada%2Fs-taprop-vms.adb;h=7509236e1e1691374883b89d36fac7ef766463de;hb=4503aa6e08e282190851174dcb3ebbb90d509d85;hp=755a2c940518debbec44f6ee9cbe98e74bff4880;hpb=d68c9dadbe2c8fda2039b574af7201427c09a77e;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/ada/s-taprop-vms.adb b/gcc/ada/s-taprop-vms.adb index 755a2c94051..7509236e1e1 100644 --- a/gcc/ada/s-taprop-vms.adb +++ b/gcc/ada/s-taprop-vms.adb @@ -602,15 +602,29 @@ package body System.Task_Primitives.Operations is Result : Interfaces.C.int; Param : aliased struct_sched_param; + function Get_Policy (Prio : System.Any_Priority) return Character; + pragma Import (C, Get_Policy, "__gnat_get_specific_dispatching"); + -- Get priority specific dispatching policy + + Priority_Specific_Policy : constant Character := Get_Policy (Prio); + -- Upper case first character of the policy name corresponding to the + -- task as set by a Priority_Specific_Dispatching pragma. + begin T.Common.Current_Priority := Prio; Param.sched_priority := Interfaces.C.int (Underlying_Priorities (Prio)); - if Time_Slice_Val > 0 then + if Dispatching_Policy = 'R' + or else Priority_Specific_Policy = 'R' + or else Time_Slice_Val > 0 + then Result := pthread_setschedparam (T.Common.LL.Thread, SCHED_RR, Param'Access); - elsif Dispatching_Policy = 'F' or else Time_Slice_Val = 0 then + elsif Dispatching_Policy = 'F' + or else Priority_Specific_Policy = 'F' + or else Time_Slice_Val = 0 + then Result := pthread_setschedparam (T.Common.LL.Thread, SCHED_FIFO, Param'Access);