comp.lang.ada
 help / color / mirror / Atom feed
* timed entry call doesnt timeout
@ 2002-01-14  9:10 Vincent Smeets
  2002-01-14 15:05 ` Matthew Heaney
  0 siblings, 1 reply; 3+ messages in thread
From: Vincent Smeets @ 2002-01-14  9:10 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 1079 bytes --]

Hallo,

gnat 3.13p on Solaris 2.6. I have added a little demo file.

I am writing a driver for an network protocol which will send data and
wait for an acknowledgement. I have implemented it in a package (Pkt)
with a procedure interface. Inside this package, I use a protected type
and the requeue statement to implement an action with a timeout.

If I directly call the interface (Pkt.Proc) it works OK. I get the
expected timeout. But if I call the interface from an extra protected
type, then the timeout doesn't occure. The call will hang forever.

In my case, it isn't a big problem because I am writing the other parts
of the program too. But what is the correct way? If I write a package
like this and let someone else call the procedures from my package. In
that case, I can't be sure that the other programmer isn't using
protected types to call my package.

Thanks,
Vincent


-- 
Vincent Smeets
SchlumbergerSema -
Competence Center Informatik GmbH 
Lohberg 10 - 49716 Meppen - Germany
tel:  +49 5931-805-461
fax:  +49 5931-805-175
mail: VSmeets@slb.com
web:  www.cci.de

[-- Attachment #2: demo.adb --]
[-- Type: text/plain, Size: 1060 bytes --]

with Ada.Text_IO;

procedure Demo is

   package Pkt is
      procedure Proc;
   end Pkt;

   package body Pkt is
      protected Prot is
	 entry Proc;
      private
	 entry Proc_Wait;
      end Prot;

      protected body Prot is
	 entry Proc when True is
	 begin
	    Ada.Text_IO.Put_Line ("Pkt.Prot.Proc");
	    requeue Proc_Wait with abort;
	 end Proc;
	 entry Proc_Wait when False is
	 begin
	    Ada.Text_IO.Put_Line ("Pkt.Prot.Proc_Wait");
	 end Proc_Wait;
      end Prot;

      procedure Proc is
      begin
	 Ada.Text_IO.Put_Line ("Pkt.Proc: start");
	 select
	    Prot.Proc;
	    Ada.Text_IO.Put_Line ("Pkt.Proc: Prot.Proc OK");
	 or
	    delay 1.0;
	    Ada.Text_IO.Put_Line ("Pkt.Proc: Prot.Proc timeout");
	 end select;
      end Proc;
   end Pkt;

   protected Outside_Prot is
      procedure Proc;
   end Outside_Prot;

   protected body Outside_Prot is
      procedure Proc is
      begin
	 Ada.Text_IO.Put_Line ("Outside_Prot.Proc: start");
	 Pkt.Proc;
      end Proc;
   end Outside_Prot;

begin
   Pkt.Proc;
   Outside_Prot.Proc;
end Demo;

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-01-15  6:20 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-01-14  9:10 timed entry call doesnt timeout Vincent Smeets
2002-01-14 15:05 ` Matthew Heaney
2002-01-15  6:20   ` Vincent Smeets

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