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
next prev 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