comp.lang.ada
 help / color / mirror / Atom feed
* RE: Device file not closing on close command
@ 2001-05-24 21:06 Beard, Frank
  2001-05-25 22:30 ` Tilman Gloetzner
  0 siblings, 1 reply; 6+ messages in thread
From: Beard, Frank @ 2001-05-24 21:06 UTC (permalink / raw)
  To: 'comp.lang.ada@ada.eu.org'

Using Aonix ObjectAda on Windows NT, we found that a "delay 0.0" had
no effect. I haven't tried it with the latest version of the compiler,
so I don't know if that has changed.  But, at the time we had to use
a delay of 0.02 to get it to switch.

-----Original Message-----
From: Ted Dennison [mailto:dennison@telepath.com]

In article <HmeP6.6910$r4.437943@www.newsranger.com>, Ted Dennison says...
>
>In article <3B0D5544.ED114B7E@uundz.de>, Tilman Gloetzner says...
>
>>            select
>..
>>            or
>>               delay(0.0);
>..
>>            end select;
>
>I doubt this has much to do with your problem, but you should probably be
using
>an "else" rather than an "or delay 0.0".
..and you probably shouldn't be using either in a tight loop, like you are
doing here. That's a busy loop. It could be that your task is hogging all
the
CPU in this busy loop, and is not giving your main task a chance to call the
Quit entry. But since it isn't higher priority, and delay is supposed to act
as
a scheduling point, I'd be suprised if this was the problem.



^ permalink raw reply	[flat|nested] 6+ messages in thread
* Device file not closing on close command
@ 2001-05-24 18:39 Tilman Gloetzner
  2001-05-24 18:16 ` Pat Rogers
  2001-05-24 20:42 ` Ted Dennison
  0 siblings, 2 replies; 6+ messages in thread
From: Tilman Gloetzner @ 2001-05-24 18:39 UTC (permalink / 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;



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

end of thread, other threads:[~2001-05-25 22:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-05-24 21:06 Device file not closing on close command Beard, Frank
2001-05-25 22:30 ` Tilman Gloetzner
  -- strict thread matches above, loose matches on Subject: below --
2001-05-24 18:39 Tilman Gloetzner
2001-05-24 18:16 ` Pat Rogers
2001-05-24 20:42 ` Ted Dennison
2001-05-24 20:47   ` Ted Dennison

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