summaryrefslogtreecommitdiff
path: root/gcc/ada/9drpc.adb
diff options
context:
space:
mode:
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-08 20:11:04 +0000
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-08 20:11:04 +0000
commitf15731c43ae5e8cea424ea40f905c19afa1bd2e4 (patch)
treeb584a79288c93215b05fb451943291ccd039388b /gcc/ada/9drpc.adb
parent1d347c236ad815c77bd345611ed221b0bd6091de (diff)
downloadgcc-f15731c43ae5e8cea424ea40f905c19afa1bd2e4.tar.gz
* 41intnam.ads, 42intnam.ads, 4aintnam.ads, 4cintnam.ads,
4dintnam.ads, 4gintnam.ads, 4hintnam.ads, 4lintnam.ads, 4mintnam.ads, 4pintnam.ads, 4rintnam.ads, 4sintnam.ads, 4uintnam.ads, 4vcalend.adb, 4zintnam.ads, 52system.ads, 5amastop.adb, 5asystem.ads, 5ataprop.adb, 5atpopsp.adb, 5avxwork.ads, 5bosinte.adb, 5bsystem.ads, 5esystem.ads, 5fsystem.ads, 5ftaprop.adb, 5ginterr.adb, 5gmastop.adb, 5gsystem.ads, 5gtaprop.adb, 5gtasinf.adb, 5gtasinf.ads, 5hparame.ads, 5hsystem.ads, 5htaprop.adb, 5htraceb.adb, 5itaprop.adb, 5ksystem.ads, 5kvxwork.ads, 5lintman.adb, 5lsystem.ads, 5mvxwork.ads, 5ninmaop.adb, 5nosinte.ads, 5ntaprop.adb, 5ointerr.adb, 5omastop.adb, 5oosinte.adb, 5osystem.ads, 5otaprop.adb, 5otaspri.ads, 5pvxwork.ads, 5qtaprop.adb, 5sintman.adb, 5ssystem.ads, 5staprop.adb, 5stpopse.adb, 5svxwork.ads, 5tosinte.ads, 5uintman.adb, 5vasthan.adb, 5vinmaop.adb, 5vinterr.adb, 5vintman.adb, 5vmastop.adb, 5vparame.ads, 5vsystem.ads, 5vtaprop.adb, 5vtpopde.adb, 5wmemory.adb, 5wsystem.ads, 5wtaprop.adb, 5ysystem.ads, 5zinterr.adb, 5zintman.adb, 5zosinte.adb, 5zosinte.ads, 5zsystem.ads, 5ztaprop.adb, 6vcpp.adb, 6vcstrea.adb, 7sintman.adb, 7staprop.adb, 7stpopsp.adb, 9drpc.adb, Make-lang.in, Makefile.in, a-caldel.adb, a-comlin.ads, a-dynpri.adb, a-except.adb, a-except.ads, a-finali.adb, a-ncelfu.ads, a-reatim.adb, a-retide.adb, a-stream.ads, a-ststio.adb, a-ststio.ads, a-stwifi.adb, a-tags.adb, a-tasatt.adb, a-textio.adb, a-tideau.adb, a-tiflau.adb, a-tigeau.adb, a-tigeau.ads, a-tiinau.adb, a-timoau.adb, a-witeio.adb, a-wtdeau.adb, a-wtenau.adb, a-wtflau.adb, a-wtgeau.adb, a-wtgeau.ads, a-wtinau.adb, a-wtmoau.adb, ada-tree.def, ada-tree.h, adaint.c, adaint.h, ali-util.adb, ali.adb, ali.ads, atree.adb, atree.ads, atree.h, back_end.adb, bcheck.adb, bindgen.adb, bindusg.adb, checks.adb, comperr.adb, config-lang.in, csets.adb, csets.ads, cstand.adb, cstreams.c, debug.adb, debug.ads, decl.c, einfo.adb, einfo.ads, einfo.h, elists.h, errout.adb, errout.ads, eval_fat.adb, exp_aggr.adb, exp_attr.adb, exp_ch11.adb, exp_ch12.adb, exp_ch13.adb, exp_ch2.adb, exp_ch3.adb, exp_ch3.ads, exp_ch4.adb, exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch7.ads, exp_ch9.adb, exp_ch9.ads, exp_dbug.adb, exp_dbug.ads, exp_disp.ads, exp_dist.adb, exp_fixd.adb, exp_intr.adb, exp_pakd.adb, exp_prag.adb, exp_strm.adb, exp_util.adb, exp_util.ads, expander.adb, expect.c, fe.h, fmap.adb, fmap.ads, fname-uf.adb, freeze.adb, frontend.adb, g-awk.adb, g-cgideb.adb, g-comlin.adb, g-comlin.ads, g-debpoo.adb, g-dirope.adb, g-dirope.ads, g-dyntab.adb, g-expect.adb, g-expect.ads, g-io.ads, g-io_aux.adb, g-io_aux.ads, g-locfil.adb, g-locfil.ads, g-os_lib.adb, g-os_lib.ads, g-regexp.adb, g-regpat.adb, g-socket.adb, g-socket.ads, g-spipat.adb, g-table.adb, g-trasym.adb, g-trasym.ads, gigi.h, gmem.c, gnat1drv.adb, gnatbind.adb, gnatbl.c, gnatchop.adb, gnatcmd.adb, gnatdll.adb, gnatfind.adb, gnatlbr.adb, gnatlink.adb, gnatls.adb, gnatmem.adb, gnatprep.adb, gnatvsn.ads, gnatxref.adb, hlo.adb, hostparm.ads, i-cobol.adb, i-cpp.adb, i-cstrea.ads, i-cstrin.adb, i-pacdec.adb, i-vxwork.ads, impunit.adb, init.c, inline.adb, io-aux.c, layout.adb, lib-load.adb, lib-util.adb, lib-writ.adb, lib-writ.ads, lib-xref.adb, lib-xref.ads, lib.adb, lib.ads, make.adb, makeusg.adb, mdll.adb, memroot.adb, misc.c, mlib-tgt.adb, mlib-utl.adb, mlib-utl.ads, mlib.adb, namet.adb, namet.ads, namet.h, nlists.h, nmake.adb, nmake.ads, nmake.adt, opt.adb, opt.ads, osint.adb, osint.ads, output.adb, output.ads, par-ch2.adb, par-ch3.adb, par-ch5.adb, par-prag.adb, par-tchk.adb, par-util.adb, par.adb, prj-attr.adb, prj-dect.adb, prj-env.adb, prj-env.ads, prj-nmsc.adb, prj-part.adb, prj-proc.adb, prj-strt.adb, prj-tree.adb, prj-tree.ads, prj.adb, prj.ads, raise.c, raise.h, repinfo.adb, restrict.adb, restrict.ads, rident.ads, rtsfind.adb, rtsfind.ads, s-arit64.adb, s-asthan.adb, s-atacco.adb, s-atacco.ads, s-auxdec.adb, s-crc32.adb, s-crc32.ads, s-direio.adb, s-fatgen.adb, s-fileio.adb, s-finimp.adb, s-gloloc.adb, s-gloloc.ads, s-interr.adb, s-mastop.adb, s-mastop.ads, s-memory.adb, s-parame.ads, s-parint.adb, s-pooglo.adb, s-pooloc.adb, s-rpc.adb, s-secsta.adb, s-sequio.adb, s-shasto.adb, s-soflin.adb, s-soflin.ads, s-stache.adb, s-taasde.adb, s-taasde.ads, s-tadeca.adb, s-tadeca.ads, s-tadert.adb, s-tadert.ads, s-taenca.adb, s-taenca.ads, s-taprob.adb, s-taprop.ads, s-tarest.adb, s-tasdeb.adb, s-tasini.adb, s-tasini.ads, s-taskin.adb, s-taskin.ads, s-tasque.adb, s-tasque.ads, s-tasren.adb, s-tasren.ads, s-tassta.adb, s-tasuti.adb, s-tasuti.ads, s-tataat.adb, s-tataat.ads, s-tpoben.adb, s-tpoben.ads, s-tpobop.adb, s-tposen.adb, s-tposen.ads, s-traceb.adb, s-traceb.ads, s-unstyp.ads, s-widenu.adb, scn-nlit.adb, scn.adb, sem.adb, sem_aggr.adb, sem_attr.adb, sem_attr.ads, sem_case.adb, sem_ch10.adb, sem_ch11.adb, sem_ch11.ads, sem_ch12.adb, sem_ch13.adb, sem_ch13.ads, sem_ch2.adb, sem_ch3.adb, sem_ch3.ads, sem_ch4.adb, sem_ch5.adb, sem_ch6.adb, sem_ch6.ads, sem_ch7.adb, sem_ch8.adb, sem_ch8.ads, sem_ch9.adb, sem_disp.adb, sem_dist.adb, sem_elab.adb, sem_elim.adb, sem_elim.ads, sem_eval.adb, sem_intr.adb, sem_mech.adb, sem_prag.adb, sem_res.adb, sem_type.adb, sem_util.adb, sem_util.ads, sem_vfpt.adb, sem_warn.adb, sinfo.adb, sinfo.ads, sinfo.h, sinput-l.adb, sinput-l.ads, sinput.adb, sinput.ads, snames.adb, snames.ads, snames.h, sprint.adb, sprint.ads, stringt.adb, stringt.ads, stringt.h, style.adb, switch.adb, switch.ads, sysdep.c, system.ads, table.adb, targparm.adb, targparm.ads, targtyps.c, tbuild.adb, tbuild.ads, tracebak.c, trans.c, tree_gen.adb, tree_io.adb, treepr.adb, treepr.ads, treeprs.ads, treeprs.adt, ttypes.ads, types.adb, types.ads, types.h, uintp.ads, urealp.ads, usage.adb, utils.c, utils2.c, validsw.adb, xnmake.adb, xr_tabls.adb, xr_tabls.ads, xref_lib.adb, xref_lib.ads : Merge in ACT changes. * 1ssecsta.adb, 1ssecsta.ads, a-chlat9.ads, a-cwila9.ads, g-enblsp.adb, g-md5.adb, g-md5.ads, gnatname.adb, gnatname.ads, mkdir.c, osint-b.adb, osint-b.ads, osint-c.adb, osint-c.ads, osint-l.adb, osint-l.ads, osint-m.adb, osint-m.ads : New files * 3lsoccon.ads, 5qparame.ads, 5qvxwork.ads, 5smastop.adb, 5zparame.ads, gnatmain.adb, gnatmain.ads, gnatpsys.adb : Removed * mdllfile.adb, mdllfile.ads, mdlltool.adb, mdlltool.ads : Renamed to mdll-fil.ad[bs] and mdll-util.ad[bs] * mdll-fil.adb, mdll-fil.ads, mdll-utl.adb, mdll-utl.ads : Renamed from mdllfile.ad[bs] and mdlltool.ad[bs] git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@50451 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/9drpc.adb')
-rw-r--r--gcc/ada/9drpc.adb302
1 files changed, 152 insertions, 150 deletions
diff --git a/gcc/ada/9drpc.adb b/gcc/ada/9drpc.adb
index 4f9d314d000..8edba9e46fb 100644
--- a/gcc/ada/9drpc.adb
+++ b/gcc/ada/9drpc.adb
@@ -6,9 +6,9 @@
-- --
-- B o d y --
-- --
--- $Revision: 1.1 $ --
+-- $Revision$
-- --
--- Copyright (C) 1992,1993,1994,1995 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -33,6 +33,8 @@
-- --
------------------------------------------------------------------------------
+-- Version for ???
+
with Unchecked_Deallocation;
with Ada.Streams;
@@ -43,6 +45,10 @@ pragma Elaborate (System.RPC.Garlic);
package body System.RPC is
+ -- ??? general note: the debugging calls are very heavy, especially
+ -- those that create exception handlers in every procedure. Do we
+ -- really still need all this stuff?
+
use type Ada.Streams.Stream_Element_Count;
use type Ada.Streams.Stream_Element_Offset;
@@ -52,7 +58,7 @@ package body System.RPC is
Max_Of_Message_Id : constant := 127;
subtype Message_Id_Type is
- Integer range -Max_Of_Message_Id .. Max_Of_Message_Id;
+ Integer range -Max_Of_Message_Id .. Max_Of_Message_Id;
-- A message id is either a request id or reply id. A message id is
-- provided with a message to a receiving stub which uses the opposite
-- as a reply id. A message id helps to retrieve to which task is
@@ -67,9 +73,9 @@ package body System.RPC is
type Message_Length_Per_Request is array (Request_Id_Type)
of Ada.Streams.Stream_Element_Count;
- Header_Size : Ada.Streams.Stream_Element_Count
- := Streams.Get_Integer_Initial_Size +
- Streams.Get_SEC_Initial_Size;
+ Header_Size : Ada.Streams.Stream_Element_Count :=
+ Streams.Get_Integer_Initial_Size +
+ Streams.Get_SEC_Initial_Size;
-- Initial size needed for frequently used header streams
Stream_Error : exception;
@@ -94,33 +100,30 @@ package body System.RPC is
Params_Size : in Ada.Streams.Stream_Element_Count;
Result_Size : in Ada.Streams.Stream_Element_Count;
Protocol : in Garlic.Protocol_Access);
- -- This entry provides an anonymous task a remote call to perform
- -- This task calls for a
- -- Request id is provided to construct the reply id by using
- -- -Request. Partition is used to send the reply message. Params_Size
- -- is the size of the calling stub Params stream. Then, Protocol
- -- (used by the environment task previously) allows to extract the
- -- message following the header (The header is extracted by the
- -- environment task)
+ -- This entry provides an anonymous task a remote call to perform.
+ -- This task calls for a Request id is provided to construct the
+ -- reply id by using -Request. Partition is used to send the reply
+ -- message. Params_Size is the size of the calling stub Params stream.
+ -- Then Protocol (used by the environment task previously) allows
+ -- extraction of the message following the header (The header is
+ -- extracted by the environment task)
+ -- Note: grammar in above is obscure??? needs cleanup
end Anonymous_Task_Type;
type Anonymous_Task_Access is access Anonymous_Task_Type;
- type Anonymous_Task_List is
- record
- Head : Anonymous_Task_Node_Access;
- Tail : Anonymous_Task_Node_Access;
- end record;
-
- type Anonymous_Task_Node is
- record
- Element : Anonymous_Task_Access;
- Next : Anonymous_Task_Node_Access;
- end record;
- -- Types we need to construct a singly linked list of anonymous tasks
- -- This pool is maintained to avoid a task creation each time a RPC
- -- occurs
+ type Anonymous_Task_List is record
+ Head : Anonymous_Task_Node_Access;
+ Tail : Anonymous_Task_Node_Access;
+ end record;
+
+ type Anonymous_Task_Node is record
+ Element : Anonymous_Task_Access;
+ Next : Anonymous_Task_Node_Access;
+ end record;
+ -- Types we need to construct a singly linked list of anonymous tasks.
+ -- This pool is maintained to avoid a task creation each time a RPC occurs.
protected Garbage_Collector is
@@ -133,6 +136,7 @@ package body System.RPC is
(Item : in out Anonymous_Task_Node_Access);
-- Anonymous task pool management : queue this task in the pool
-- of inactive anonymous tasks.
+
private
Anonymous_List : Anonymous_Task_Node_Access;
@@ -230,13 +234,16 @@ package body System.RPC is
---------------
procedure Head_Node
- (Index : out Packet_Node_Access;
- Stream : in Params_Stream_Type) is
+ (Index : out Packet_Node_Access;
+ Stream : Params_Stream_Type)
+ is
begin
Index := Stream.Extra.Head;
- exception when others =>
- D (D_Exception, "exception in Head_Node");
- raise;
+
+ exception
+ when others =>
+ D (D_Exception, "exception in Head_Node");
+ raise;
end Head_Node;
---------------
@@ -244,34 +251,37 @@ package body System.RPC is
---------------
procedure Tail_Node
- (Index : out Packet_Node_Access;
- Stream : in Params_Stream_Type) is
+ (Index : out Packet_Node_Access;
+ Stream : Params_Stream_Type)
+ is
begin
Index := Stream.Extra.Tail;
- exception when others =>
- D (D_Exception, "exception in Tail_Node");
- raise;
+
+ exception
+ when others =>
+ D (D_Exception, "exception in Tail_Node");
+ raise;
end Tail_Node;
---------------
-- Null_Node --
---------------
- function Null_Node
- (Index : in Packet_Node_Access) return Boolean is
+ function Null_Node (Index : in Packet_Node_Access) return Boolean is
begin
return Index = null;
- exception when others =>
- D (D_Exception, "exception in Null_Node");
- raise;
+
+ exception
+ when others =>
+ D (D_Exception, "exception in Null_Node");
+ raise;
end Null_Node;
----------------------
-- Delete_Head_Node --
----------------------
- procedure Delete_Head_Node
- (Stream : in out Params_Stream_Type) is
+ procedure Delete_Head_Node (Stream : in out Params_Stream_Type) is
procedure Free is
new Unchecked_Deallocation
@@ -280,7 +290,6 @@ package body System.RPC is
Next_Node : Packet_Node_Access := Stream.Extra.Head.Next;
begin
-
-- Delete head node and free memory usage
Free (Stream.Extra.Head);
@@ -292,19 +301,18 @@ package body System.RPC is
Stream.Extra.Tail := null;
end if;
- exception when others =>
- D (D_Exception, "exception in Delete_Head_Node");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Delete_Head_Node");
+ raise;
end Delete_Head_Node;
---------------
-- Next_Node --
---------------
- procedure Next_Node
- (Node : in out Packet_Node_Access) is
+ procedure Next_Node (Node : in out Packet_Node_Access) is
begin
-
-- Node is set to the next node
-- If not possible, Stream_Error is raised
@@ -314,20 +322,20 @@ package body System.RPC is
Node := Node.Next;
end if;
- exception when others =>
- D (D_Exception, "exception in Next_Node");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Next_Node");
+ raise;
end Next_Node;
---------------------
-- Append_New_Node --
---------------------
- procedure Append_New_Node
- (Stream : in out Params_Stream_Type) is
+ procedure Append_New_Node (Stream : in out Params_Stream_Type) is
Index : Packet_Node_Access;
- begin
+ begin
-- Set Index to the end of the linked list
Tail_Node (Index, Stream);
@@ -340,7 +348,6 @@ package body System.RPC is
Stream.Extra.Tail := Stream.Extra.Head;
else
-
-- The list is not empty : link new node with tail
Stream.Extra.Tail.Next := new Packet_Node;
@@ -348,9 +355,10 @@ package body System.RPC is
end if;
- exception when others =>
- D (D_Exception, "exception in Append_New_Node");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Append_New_Node");
+ raise;
end Append_New_Node;
----------
@@ -360,8 +368,8 @@ package body System.RPC is
procedure Read
(Stream : in out Params_Stream_Type;
Item : out Ada.Streams.Stream_Element_Array;
- Last : out Ada.Streams.Stream_Element_Offset) renames
- System.RPC.Streams.Read;
+ Last : out Ada.Streams.Stream_Element_Offset)
+ renames System.RPC.Streams.Read;
-----------
-- Write --
@@ -369,8 +377,8 @@ package body System.RPC is
procedure Write
(Stream : in out Params_Stream_Type;
- Item : in Ada.Streams.Stream_Element_Array) renames
- System.RPC.Streams.Write;
+ Item : in Ada.Streams.Stream_Element_Array)
+ renames System.RPC.Streams.Write;
-----------------------
-- Garbage_Collector --
@@ -382,12 +390,11 @@ package body System.RPC is
-- Garbage_Collector.Allocate --
--------------------------------
- procedure Allocate
- (Item : out Anonymous_Task_Node_Access) is
+ procedure Allocate (Item : out Anonymous_Task_Node_Access) is
New_Anonymous_Task_Node : Anonymous_Task_Node_Access;
Anonymous_Task : Anonymous_Task_Access;
- begin
+ begin
-- If the list is empty, allocate a new anonymous task
-- Otherwise, reuse the first queued anonymous task
@@ -404,7 +411,6 @@ package body System.RPC is
New_Anonymous_Task_Node.all := (Anonymous_Task, null);
else
-
-- Extract one task from the list
-- Set the Next field to null to avoid possible bugs
@@ -418,27 +424,27 @@ package body System.RPC is
Item := New_Anonymous_Task_Node;
- exception when others =>
- D (D_Exception, "exception in Allocate (Anonymous Task)");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Allocate (Anonymous Task)");
+ raise;
end Allocate;
----------------------------------
-- Garbage_Collector.Deallocate --
----------------------------------
- procedure Deallocate
- (Item : in out Anonymous_Task_Node_Access) is
+ procedure Deallocate (Item : in out Anonymous_Task_Node_Access) is
begin
-
-- Enqueue the task in the free list
Item.Next := Anonymous_List;
Anonymous_List := Item;
- exception when others =>
- D (D_Exception, "exception in Deallocate (Anonymous Task)");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Deallocate (Anonymous Task)");
+ raise;
end Deallocate;
end Garbage_Collector;
@@ -448,15 +454,16 @@ package body System.RPC is
------------
procedure Do_RPC
- (Partition : in Partition_ID;
+ (Partition : Partition_ID;
Params : access Params_Stream_Type;
- Result : access Params_Stream_Type) is
+ Result : access Params_Stream_Type)
+ is
Protocol : Protocol_Access;
Request : Request_Id_Type;
Header : aliased Params_Stream_Type (Header_Size);
R_Length : Ada.Streams.Stream_Element_Count;
- begin
+ begin
-- Parameters order :
-- Opcode (provided and used by garlic)
-- (1) Size (provided by s-rpc and used by garlic)
@@ -538,7 +545,6 @@ package body System.RPC is
declare
New_Result : aliased Params_Stream_Type (R_Length);
begin
-
-- Adjust the Result stream size right now to be able to load
-- the stream in one receive call. Create a temporary resutl
-- that will be substituted to Do_RPC one
@@ -570,7 +576,6 @@ package body System.RPC is
end;
else
-
-- Do RPC locally and first wait for Partition_RPC_Receiver to be
-- set
@@ -580,9 +585,10 @@ package body System.RPC is
end if;
- exception when others =>
- D (D_Exception, "exception in Do_RPC");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Do_RPC");
+ raise;
end Do_RPC;
------------
@@ -590,13 +596,14 @@ package body System.RPC is
------------
procedure Do_APC
- (Partition : in Partition_ID;
- Params : access Params_Stream_Type) is
+ (Partition : Partition_ID;
+ Params : access Params_Stream_Type)
+ is
Message_Id : Message_Id_Type := 0;
Protocol : Protocol_Access;
Header : aliased Params_Stream_Type (Header_Size);
- begin
+ begin
-- For more informations, see above
-- Request = 0 as we are not waiting for a reply message
-- Result length = 0 as we don't expect a result at all
@@ -660,7 +667,6 @@ package body System.RPC is
declare
Result : aliased Params_Stream_Type (0);
begin
-
-- Result is here a dummy parameter
-- No reason to deallocate as it is not allocated at all
@@ -672,29 +678,31 @@ package body System.RPC is
end if;
- exception when others =>
- D (D_Exception, "exception in Do_APC");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Do_APC");
+ raise;
end Do_APC;
----------------------------
-- Establish_RPC_Receiver --
----------------------------
- procedure Establish_RPC_Receiver (
- Partition : in Partition_ID;
- Receiver : in RPC_Receiver) is
+ procedure Establish_RPC_Receiver
+ (Partition : in Partition_ID;
+ Receiver : in RPC_Receiver)
+ is
begin
-
-- Set Partition_RPC_Receiver and allow RPC mechanism
Partition_RPC_Receiver := Receiver;
Partition_Receiver.Set;
D (D_Elaborate, "Partition_Receiver is set");
- exception when others =>
- D (D_Exception, "exception in Establish_RPC_Receiver");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Establish_RPC_Receiver");
+ raise;
end Establish_RPC_Receiver;
----------------
@@ -705,24 +713,24 @@ package body System.RPC is
Last_Request : Request_Id_Type := Request_Id_Type'First;
Current_Rqst : Request_Id_Type := Request_Id_Type'First;
Current_Size : Ada.Streams.Stream_Element_Count;
- begin
+ begin
loop
+ -- Three services:
- -- Three services :
- -- New_Request to get an entry in Dispatcher table
- -- Wait_On for Do_RPC calls
- -- Wake_Up called by environment task when a Do_RPC receives
- -- the result of its remote call
+ -- New_Request to get an entry in Dispatcher table
- select
+ -- Wait_On for Do_RPC calls
+
+ -- Wake_Up called by environment task when a Do_RPC receives
+ -- the result of its remote call
- accept New_Request
- (Request : out Request_Id_Type) do
+ select
+ accept New_Request (Request : out Request_Id_Type) do
Request := Last_Request;
-- << TODO >>
- -- Avaibility check
+ -- ??? Avaibility check
if Last_Request = Request_Id_Type'Last then
Last_Request := Request_Id_Type'First;
@@ -733,11 +741,10 @@ package body System.RPC is
end New_Request;
or
-
accept Wake_Up
- (Request : in Request_Id_Type;
- Length : in Ada.Streams.Stream_Element_Count) do
-
+ (Request : Request_Id_Type;
+ Length : Ada.Streams.Stream_Element_Count)
+ do
-- The environment reads the header and has been notified
-- of the reply id and the size of the result message
@@ -747,17 +754,17 @@ package body System.RPC is
end Wake_Up;
-- << TODO >>
- -- Must be select with delay for aborted tasks
+ -- ??? Must be select with delay for aborted tasks
select
accept Wait_On (Current_Rqst)
- (Length : out Ada.Streams.Stream_Element_Count) do
+ (Length : out Ada.Streams.Stream_Element_Count)
+ do
Length := Current_Size;
end Wait_On;
or
-
-- To free the Dispatcher when a task is aborted
delay 1.0;
@@ -765,16 +772,15 @@ package body System.RPC is
end select;
or
-
terminate;
-
end select;
end loop;
- exception when others =>
- D (D_Exception, "exception in Dispatcher body");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Dispatcher body");
+ raise;
end Dispatcher;
-------------------------
@@ -788,10 +794,9 @@ package body System.RPC is
Params_S : Ada.Streams.Stream_Element_Count; -- Params message size
Result_S : Ada.Streams.Stream_Element_Count; -- Result message size
C_Protocol : Protocol_Access; -- Current Protocol
- begin
+ begin
loop
-
-- Get a new RPC to execute
select
@@ -800,7 +805,8 @@ package body System.RPC is
Partition : in Partition_ID;
Params_Size : in Ada.Streams.Stream_Element_Count;
Result_Size : in Ada.Streams.Stream_Element_Count;
- Protocol : in Protocol_Access) do
+ Protocol : in Protocol_Access)
+ do
C_Message_Id := Message_Id;
C_Partition := Partition;
Params_S := Params_Size;
@@ -812,11 +818,11 @@ package body System.RPC is
end select;
declare
- Params : aliased Params_Stream_Type (Params_S);
- Result : aliased Params_Stream_Type (Result_S);
- Header : aliased Params_Stream_Type (Header_Size);
- begin
+ Params : aliased Params_Stream_Type (Params_S);
+ Result : aliased Params_Stream_Type (Result_S);
+ Header : aliased Params_Stream_Type (Header_Size);
+ begin
-- We reconstruct all the client context : Params and Result
-- with the SAME size, then we receive Params from calling stub
@@ -863,7 +869,6 @@ package body System.RPC is
(Header'Access,
Streams.Get_Stream_Size (Result'Access));
-
-- Get a protocol method to comunicate with the remote
-- partition and give the message size
@@ -903,12 +908,10 @@ package body System.RPC is
(C_Protocol.all,
C_Partition);
Streams.Deallocate (Header);
-
end if;
Streams.Deallocate (Params);
Streams.Deallocate (Result);
-
end;
-- Enqueue into the anonymous task free list : become inactive
@@ -917,9 +920,10 @@ package body System.RPC is
end loop;
- exception when others =>
- D (D_Exception, "exception in Anonymous_Task_Type body");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Anonymous_Task_Type body");
+ raise;
end Anonymous_Task_Type;
-----------------
@@ -934,15 +938,14 @@ package body System.RPC is
Header : aliased Params_Stream_Type (Header_Size);
Protocol : Protocol_Access;
Anonymous : Anonymous_Task_Node_Access;
- begin
+ begin
-- Wait the Partition_RPC_Receiver to be set
accept Start;
D (D_Elaborate, "Environment task elaborated");
loop
-
-- We receive first a fixed size message : the header
-- Header = Message Id + Message Size
@@ -952,10 +955,10 @@ package body System.RPC is
-- protocol to use to communicate with the calling partition
Garlic.Initiate_Receive
- (Partition,
- Message_Size,
- Protocol,
- Garlic.Remote_Call);
+ (Partition,
+ Message_Size,
+ Protocol,
+ Garlic.Remote_Call);
D (D_Communication,
"Environment task - Receive protocol to talk to active partition" &
Partition_ID'Image (Partition));
@@ -968,9 +971,9 @@ package body System.RPC is
"Environment task - Receive Header from partition" &
Partition_ID'Image (Partition));
Garlic.Receive
- (Protocol.all,
- Partition,
- Header'Access);
+ (Protocol.all,
+ Partition,
+ Header'Access);
-- Evaluate the remaining size of the message
@@ -1001,7 +1004,6 @@ package body System.RPC is
Dispatcher.Wake_Up (-Message_Id, Result_Size);
else
-
-- The message was send by a calling stub : get an anonymous
-- task to perform the job
@@ -1027,13 +1029,13 @@ package body System.RPC is
end loop;
- exception when others =>
- D (D_Exception, "exception in Environment");
- raise;
+ exception
+ when others =>
+ D (D_Exception, "exception in Environment");
+ raise;
end Environnement;
begin
-
-- Set debugging information
Debugging.Set_Environment_Variable ("RPC");