comp.lang.ada
 help / color / mirror / Atom feed
From: "Dr. Adrian Wrigley" <amtw@linuxchip.demon.co.uk.uk.uk>
Subject: Re: Reliability and deadlock in Annex E/distributed code
Date: Tue, 12 Sep 2006 20:31:55 GMT
Date: 2006-09-12T20:31:55+00:00	[thread overview]
Message-ID: <pan.2006.09.12.20.30.44.951448@linuxchip.demon.co.uk.uk.uk> (raw)
In-Reply-To: pan.2006.09.10.20.55.57.113998@linuxchip.demon.co.uk.uk.uk

On Sun, 10 Sep 2006 20:58:33 +0000, Dr. Adrian Wrigley wrote:

> I've been having difficulty getting my Annex E/glade code to run reliably.
> 
> Under gnat 3.15p for x86 Linux, things were tolerably OK, with failures
> of the code about weekly (running one instance continuously).
> Sometimes the program simply wouldn't allow new partitions to run, as if
> there was some boot server failure.  Sometimes the server would suddenly
> start consuming all the CPU cycles it could get.
...

OK.  I have produced a fairly short example.
There are three partitions, A, B, C.
C calls B which calls A.
Compiler is GNAT GPL 2006 + GLADE 2006 on x86 Linux

The partition C (executable in ./cpart) runs OK on *alternate*
invocations.  Every other time, it hangs indefinitely.
This seems strange.

Dialogue following shows source files, compilation and
two invocations of partition C, one hanging.
Host machine is archimedes, in bash.


archimedes$ ls -l *.ad[sb] dist.cfg
-rw-rw-rw-    1 amtw     amtw          188 Sep 12 16:04 a.adb
-rw-rw-rw-    1 amtw     amtw           88 Sep 12 16:14 a.ads
-rw-rw-rw-    1 amtw     amtw          106 Sep 12 16:11 amain.adb
-rw-rw-r--    1 amtw     amtw          466 Sep 12 16:17 b.adb
-rw-rw-r--    1 amtw     amtw          116 Sep 12 16:08 b.ads
-rw-rw-rw-    1 amtw     amtw          252 Sep 12 16:10 cmain.adb
-rw-rw-rw-    1 amtw     amtw          540 Sep 12 16:16 dist.cfg

archimedes$ head -n 100 *.ad[sb] dist.cfg
==> a.adb <==
package body A is

   X : Integer := 0;

   function Next return Integer is
   begin
      X := X + 1; -- Return next integer in sequence, unprotected
      return X;
   end Next;

end A;

==> a.ads <==
package A is

   pragma Remote_Call_Interface;
   function Next return Integer;

end A;

==> amain.adb <==
with A;

procedure Amain is
begin

   delay 1000.0; -- Wait around for a while, then complete

end Amain;

==> b.adb <==
with Text_IO;
with A;

package body B is

-- Return A.Next simply by passing call through
   function Next return Integer is
   begin
      Text_IO.Put_Line ("B: B Next called");

      return A.Next;
   end Next;

   task Main;
   task body Main is
   begin
      Text_IO.Put_Line ("B: B making direct call to RCI function in A:");
-- Direct call to function in A works fine
      Text_IO.Put_Line ("B: A Next gives" & Integer'Image (A.Next));
   end Main;

end B;

==> b.ads <==
package B is

   pragma Remote_Call_Interface;
   function Next return Integer; -- Pass through of A's Next

end B;

==> cmain.adb <==
with Text_IO;
with B;

-- Each time this program is run, should produce the next integer in sequence

procedure CMain is

begin

   Text_IO.Put_Line ("C: Running  B.Next:");
   Text_IO.Put_Line ("C: B Next gives" & Integer'Image (B.Next));

end CMain;

==> dist.cfg <==
configuration Dist is

-- Boot server specification:
  pragma Starter (None);
  pragma Boot_Location ("tcp", "localhost:6788"); -- Choose spare port

  APart : Partition := (A);
  procedure AMain is in APart;
  for APart'Task_Pool use (4, 4, 10);

  BPart : Partition := (B);
  for BPart'Task_Pool use (4, 4, 10);

  procedure CMain;
  CPart : Partition := (CMain);
  for CPart'Task_Pool use (4, 4, 10);
  for CPart'Main use CMain;
  for CPart'Termination use Local_Termination;
  for CPart'Reconnection use Block_Until_Restart;

end Dist;
archimedes$

archimedes$ gcc -v   # Test the compiler version
Reading specs from /data2/gnat-gpl/bin/../lib/gcc/i686-pc-linux-gnu/3.4.6/specs
Configured with: /cardhu.b/gnatmail/release-gpl/build-cardhu/src/configure --prefix=/usr/gnat --enable-languages=c,ada --disable-nls --disable-libada --target=i686-pc-linux-gnu --host=i686-pc-linux-gnu --disable-checking --enable-threads=posix
Thread model: posix
gcc version 3.4.6 for GNAT GPL 2006 (20060522)


archimedes$ gnatdist -g dist.cfg   # Build the partitions
gnatdist: checking configuration consistency
 ------------------------------
 ---- Configuration report ----
 ------------------------------
Configuration :
   Name        : dist
   Main        : amain
   Starter     : none
   Protocols   : tcp://localhost:6788

Partition apart
   Main        : amain
   Task Pool   : 4 4 10 
   Units       : 
             - a (rci)
             - amain (normal)

Partition bpart
   Task Pool   : 4 4 10 
   Units       : 
             - b (rci)

Partition cpart
   Main        : cmain
   Task Pool   : 4 4 10 
   Termination : local
   Units       : 
             - cmain (normal)

 -------------------------------
gnatdist:    a caller stubs is up to date
gnatdist:    a receiver stubs is up to date
gnatdist: building b caller stubs from b.ads
gnatdist: building b receiver stubs from b.adb
gnatdist: building partition bpart
gnatdist: building partition cpart
archimedes$
archimedes$ ./apart &   # Start partition A
[1] 20904
archimedes$ ./bpart &   # Start partition B
[2] 20911
archimedes$ B: B making direct call to RCI function in A:
B: A Next gives 1

archimedes$ ./cpart     # Test partition C
C: Running  B.Next:
B: B Next called
C: B Next gives 2       # Works!
archimedes$ ./cpart     # Test partition C again
C: Running  B.Next:     # Hangs :(


--
Adrian








  parent reply	other threads:[~2006-09-12 20:31 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-10 20:58 Reliability and deadlock in Annex E/distributed code Dr. Adrian Wrigley
2006-09-11 18:52 ` Jerome Hugues
2006-09-12 20:40   ` Dr. Adrian Wrigley
2006-09-13  7:16     ` Dmitry A. Kazakov
2006-09-12 20:31 ` Dr. Adrian Wrigley [this message]
2006-09-12 23:24   ` tmoran
2006-09-13 11:00     ` Dr. Adrian Wrigley
2006-09-13 11:21   ` Dr. Adrian Wrigley
2006-09-21 21:18   ` Dr. Adrian Wrigley
2006-09-22 13:52   ` Dr. Adrian Wrigley
2006-09-22 23:11     ` Ludovic Brenta
2006-09-23 16:03       ` Reliability and deadlock in Annex E/distributed code (progress at last!) Dr. Adrian Wrigley
2006-09-23 19:17         ` Björn Persson
2006-09-23 20:53           ` Dr. Adrian Wrigley
2006-09-23 22:21             ` Björn Persson
2006-09-23 23:31               ` tmoran
2006-09-24  0:19                 ` Dr. Adrian Wrigley
2006-09-25 11:41             ` Alex R. Mosteo
  -- strict thread matches above, loose matches on Subject: below --
2006-09-15 21:24 Reliability and deadlock in Annex E/distributed code Anh Vo
2006-09-17 13:33 ` Dr. Adrian Wrigley
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox