comp.lang.ada
 help / color / mirror / Atom feed
From: Tilman Gloetzner <Tilman.Gloetzner@uundz.de>
Subject: Device file not closing on close command
Date: Thu, 24 May 2001 20:39:00 +0200
Date: 2001-05-24T20:39:00+02:00	[thread overview]
Message-ID: <3B0D5544.ED114B7E@uundz.de> (raw)

Hi,
 
the program below controls a task handeling a serial device. The task
opens the device file, and 5 secs later the device file should be
closed. When running the program below, the device is opened, but when
the time comes to close the device the task just blocks on the
closecommand. If I open and close the device from the main procedure it
just works fine. The device is connected to a GPS receiver which is
constantly sending data. I am using gnat 3.13 onlinux (2.1.18) and linux
native threads.
 
Why does the task block(is it because there is still unread data in the
device -- but why would it work then if I open and close the device from
the main procedure rather than from the task ?) ? How can I make the
task close the file right away ?
 
 
Thank you,
 
Tilman                  



================== main =====================
with Text_IO;use Text_IO;
with Device;use Device;
 
procedure access_dev is
   TtyS2:   DevTask;
   In_Stream: File_Type;
begin
   TtyS2.Open("/dev/ttyS2");
   delay(5.0);
   Put_Line("waited for 5 secs");
   TtyS2.Close;
 
end access_dev;
 
=============== package specification ==============
package Device is
   task type DevTask is
      entry Open(Dev:String);
      entry Close;
      entry Quit;
   end DevTask;
end Device;
============== package body =======================
with Text_Io;use Text_Io;
with Device; use Device;
package body Device is
      task body DevTask is
         Exit_Flag: Boolean := False;
         In_Stream: File_Type;
         Buf:       String(1..82);
         Noc:       Integer := 0;
      begin
         while (Exit_Flag = False) loop        
            select
               accept Open(Dev:String) do
                  Put_Line("Openening Device " & Dev );
                  Open(In_Stream,IN_FILE, "/dev/ttyS2");
                  Put_Line("Device opened");
               end Open;
            or
               accept Close do
                  --if (Is_Open(In_Stream)) then
                     Put_Line("Closing Device");
                     Close(In_Stream);
                     Put_Line("Device closed");
            --      end if;
               end Close;
            or
               accept Quit do
                  Exit_Flag := True;
               end Quit;
            or
               delay(0.0);
--               if (Is_Open(In_Stream)) then
                   Get_Line(In_Stream,Buf,Noc);
                   Put_Line(Buf(1..Noc));
--               end if;
            end select;
         end loop;
       Put_line("Task terminated");
      end DevTask;
end Device;



             reply	other threads:[~2001-05-24 18:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-05-24 18:39 Tilman Gloetzner [this message]
2001-05-24 18:16 ` Device file not closing on close command Pat Rogers
2001-05-24 20:42 ` Ted Dennison
2001-05-24 20:47   ` Ted Dennison
  -- strict thread matches above, loose matches on Subject: below --
2001-05-24 21:06 Beard, Frank
2001-05-25 22:30 ` Tilman Gloetzner
replies disabled

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