[Ada] Raise exception on call to Expect for a dead process
Call to Expect for a dead process results in SIGBUS signal on Linux systems. Process_Died exception is raised in this case now. 2019-09-18 Vadim Godunko <godunko@adacore.com> gcc/ada/ * libgnat/g-expect.adb (Expect_Internal): Don't include invalid file descriptors into the set of file descriptors for Poll. Raise Process_Died exception when computed set of file descriptors to monitor is empty. gcc/testsuite/ * gnat.dg/expect4.adb: New testcase. From-SVN: r275847
This commit is contained in:
parent
82fa20a211
commit
209a0094c4
|
@ -1,3 +1,10 @@
|
|||
2019-09-18 Vadim Godunko <godunko@adacore.com>
|
||||
|
||||
* libgnat/g-expect.adb (Expect_Internal): Don't include invalid
|
||||
file descriptors into the set of file descriptors for Poll.
|
||||
Raise Process_Died exception when computed set of file
|
||||
descriptors to monitor is empty.
|
||||
|
||||
2019-09-18 Frederic Konrad <konrad@adacore.com>
|
||||
|
||||
* adaint.c: Include dosFsLib.h and vwModNum.h for VxWorks 6.
|
||||
|
|
|
@ -653,7 +653,9 @@ package body GNAT.Expect is
|
|||
|
||||
begin
|
||||
for J in Descriptors'Range loop
|
||||
if Descriptors (J) /= null then
|
||||
if Descriptors (J) /= null
|
||||
and then Descriptors (J).Output_Fd /= Invalid_FD
|
||||
then
|
||||
Fds (Fds'First + Fds_Count) := Descriptors (J).Output_Fd;
|
||||
Fds_To_Descriptor (Fds'First + Fds_Count) := J;
|
||||
Fds_Count := Fds_Count + 1;
|
||||
|
@ -667,6 +669,14 @@ package body GNAT.Expect is
|
|||
end if;
|
||||
end loop;
|
||||
|
||||
if Fds_Count = 0 then
|
||||
-- There are no descriptors to monitor, it means that process died.
|
||||
|
||||
Result := Expect_Process_Died;
|
||||
|
||||
return;
|
||||
end if;
|
||||
|
||||
declare
|
||||
Buffer : aliased String (1 .. Buffer_Size);
|
||||
-- Buffer used for input. This is allocated only once, not for
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2019-09-18 Vadim Godunko <godunko@adacore.com>
|
||||
|
||||
* gnat.dg/expect4.adb: New testcase.
|
||||
|
||||
2019-09-18 Steve Baird <baird@adacore.com>
|
||||
|
||||
* gnat.dg/ghost7.adb, gnat.dg/ghost7.ads: New testcase.
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
-- { dg-do run }
|
||||
|
||||
with GNAT.Expect.TTY;
|
||||
with GNAT.OS_Lib;
|
||||
|
||||
procedure Expect4 is
|
||||
Pid : GNAT.Expect.TTY.TTY_Process_Descriptor;
|
||||
Args : GNAT.OS_Lib.Argument_List (1 .. 0);
|
||||
Result : GNAT.Expect.Expect_Match;
|
||||
|
||||
begin
|
||||
Pid.Non_Blocking_Spawn ("true", Args);
|
||||
|
||||
begin
|
||||
Pid.Expect (Result, ".*");
|
||||
|
||||
raise Program_Error;
|
||||
|
||||
exception
|
||||
when GNAT.Expect.Process_Died =>
|
||||
null;
|
||||
end;
|
||||
|
||||
begin
|
||||
Pid.Expect (Result, ".*");
|
||||
|
||||
raise Program_Error;
|
||||
|
||||
exception
|
||||
when GNAT.Expect.Process_Died =>
|
||||
null;
|
||||
end;
|
||||
|
||||
Pid.Close;
|
||||
end Expect4;
|
Loading…
Reference in New Issue