Commit dd52e06a by Jerome Lambourg Committed by Arnaud Charlet

g-expect.adb (Non_Blocking_Spawn): Initialize the filters field to

2005-09-01  Jerome Lambourg  <lambourg@adacore.com>

	* g-expect.adb (Non_Blocking_Spawn): Initialize the filters field to
	(Free): New deallocation procedure for filter elements
	(Close): Deallocate any existing filter for the concerned connection

From-SVN: r103866
parent 829c2849
...@@ -69,6 +69,9 @@ package body GNAT.Expect is ...@@ -69,6 +69,9 @@ package body GNAT.Expect is
procedure Free is new Unchecked_Deallocation procedure Free is new Unchecked_Deallocation
(Pattern_Matcher, Pattern_Matcher_Access); (Pattern_Matcher, Pattern_Matcher_Access);
procedure Free is new Unchecked_Deallocation
(Filter_List_Elem, Filter_List);
procedure Call_Filters procedure Call_Filters
(Pid : Process_Descriptor'Class; (Pid : Process_Descriptor'Class;
Str : String; Str : String;
...@@ -204,6 +207,9 @@ package body GNAT.Expect is ...@@ -204,6 +207,9 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor; (Descriptor : in out Process_Descriptor;
Status : out Integer) Status : out Integer)
is is
Current_Filter : Filter_List;
Next_Filter : Filter_List;
begin begin
Close (Descriptor.Input_Fd); Close (Descriptor.Input_Fd);
...@@ -214,11 +220,21 @@ package body GNAT.Expect is ...@@ -214,11 +220,21 @@ package body GNAT.Expect is
Close (Descriptor.Output_Fd); Close (Descriptor.Output_Fd);
-- ??? Should have timeouts for different signals -- ??? Should have timeouts for different signals
Kill (Descriptor.Pid, 9); Kill (Descriptor.Pid, 9);
GNAT.OS_Lib.Free (Descriptor.Buffer); GNAT.OS_Lib.Free (Descriptor.Buffer);
Descriptor.Buffer_Size := 0; Descriptor.Buffer_Size := 0;
Current_Filter := Descriptor.Filters;
while Current_Filter /= null loop
Next_Filter := Current_Filter.Next;
Free (Current_Filter);
Current_Filter := Next_Filter;
end loop;
Descriptor.Filters := null;
Status := Waitpid (Descriptor.Pid); Status := Waitpid (Descriptor.Pid);
end Close; end Close;
...@@ -1001,6 +1017,10 @@ package body GNAT.Expect is ...@@ -1001,6 +1017,10 @@ package body GNAT.Expect is
if Buffer_Size /= 0 then if Buffer_Size /= 0 then
Descriptor.Buffer := new String (1 .. Positive (Buffer_Size)); Descriptor.Buffer := new String (1 .. Positive (Buffer_Size));
end if; end if;
-- Initialize the filters
Descriptor.Filters := null;
end Non_Blocking_Spawn; end Non_Blocking_Spawn;
------------------------- -------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment