* 5zosinte.ads (null_pthread): new constant.
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Oct 2001 16:09:47 +0000 (16:09 +0000)
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Oct 2001 16:09:47 +0000 (16:09 +0000)
* 5ztaprop.adb:
(Initialize_TCB): Initialize thread ID to null, to be able to verify
 later that this field has been set.
(Finalize_TCB): ditto.
(Suspend_Task): Verify that the thread ID is not null before using it.
(Resume_Task): ditto.

* s-tasdeb.adb:
(Resume_All_Tasks): Lock the tasks list before using it.
(Suspend_All_Tasks): ditto.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46548 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/5zosinte.ads
gcc/ada/5ztaprop.adb
gcc/ada/ChangeLog
gcc/ada/s-tasdeb.adb

index f077779..5eddd72 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                   S p e c                                --
 --                                                                          --
---                             $Revision: 1.16 $
+--                             $Revision$
 --                                                                          --
 --           Copyright (C) 1997-2001 Free Software Foundation, Inc.         --
 --                                                                          --
@@ -218,6 +218,8 @@ package System.OS_Interface is
    type pthread_t           is private;
    subtype Thread_Id        is pthread_t;
 
+   null_pthread : constant pthread_t;
+
    type pthread_mutex_t     is limited private;
    type pthread_cond_t      is limited private;
    type pthread_attr_t      is limited private;
@@ -542,6 +544,8 @@ private
 
    type pthread_t is new long;
 
+   null_pthread : constant pthread_t := 0;
+
    type pthread_key_t is new int;
 
    --  These are to store the pthread_keys that are created with
index b543ae2..0d9538c 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                  B o d y                                 --
 --                                                                          --
---                             $Revision: 1.41 $
+--                             $Revision$
 --                                                                          --
 --             Copyright (C) 1991-2001 Florida State University             --
 --                                                                          --
@@ -728,6 +728,8 @@ package body System.Task_Primitives.Operations is
       Cond_Attr : aliased pthread_condattr_t;
 
    begin
+      Self_ID.Common.LL.Thread := null_pthread;
+
       Result := pthread_mutexattr_init (Mutex_Attr'Access);
       pragma Assert (Result = 0 or else Result = ENOMEM);
 
@@ -898,6 +900,8 @@ package body System.Task_Primitives.Operations is
         Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
 
    begin
+      T.Common.LL.Thread := null_pthread;
+
       Result := pthread_mutex_destroy (T.Common.LL.L'Access);
       pragma Assert (Result = 0);
 
@@ -989,7 +993,9 @@ package body System.Task_Primitives.Operations is
      (T           : ST.Task_ID;
       Thread_Self : Thread_Id) return Boolean is
    begin
-      if T.Common.LL.Thread /= Thread_Self then
+      if T.Common.LL.Thread /= null_pthread
+        and then T.Common.LL.Thread /= Thread_Self
+      then
          return taskSuspend (T.Common.LL.Thread) = 0;
       else
          return True;
@@ -1004,7 +1010,9 @@ package body System.Task_Primitives.Operations is
      (T           : ST.Task_ID;
       Thread_Self : Thread_Id) return Boolean is
    begin
-      if T.Common.LL.Thread /= Thread_Self then
+      if T.Common.LL.Thread /= null_pthread
+        and then T.Common.LL.Thread /= Thread_Self
+      then
          return taskResume (T.Common.LL.Thread) = 0;
       else
          return True;
index 7ef18b9..952e38d 100644 (file)
@@ -1,3 +1,18 @@
+2001-10-26  Joel Brobecker <brobecke@gnat.com>
+
+       * 5zosinte.ads (null_pthread): new constant.
+       
+       * 5ztaprop.adb:
+       (Initialize_TCB): Initialize thread ID to null, to be able to verify
+        later that this field has been set.
+       (Finalize_TCB): ditto.
+       (Suspend_Task): Verify that the thread ID is not null before using it.
+       (Resume_Task): ditto.
+       
+       * s-tasdeb.adb:
+       (Resume_All_Tasks): Lock the tasks list before using it.
+       (Suspend_All_Tasks): ditto.
+
 2001-10-26  Richard Kenner <kenner@gnat.com>
 
        * decl.c (gnat_to_gnu_entity, case E_General_Access_Type): 
index 83e2efc..4ee2fd4 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                  B o d y                                 --
 --                                                                          --
---                             $Revision: 1.23 $
+--                             $Revision$
 --                                                                          --
 --          Copyright (C) 1997-2001 Free Software Foundation, Inc.          --
 --                                                                          --
@@ -499,12 +499,15 @@ package body System.Tasking.Debug is
       R : Boolean;
 
    begin
+      STPO.Lock_All_Tasks_List;
       C := All_Tasks_List;
 
       while C /= null loop
          R := STPO.Resume_Task (C, Thread_Self);
          C := C.Common.All_Tasks_Link;
       end loop;
+
+      STPO.Unlock_All_Tasks_List;
    end Resume_All_Tasks;
 
    ----------
@@ -577,12 +580,15 @@ package body System.Tasking.Debug is
       R : Boolean;
 
    begin
+      STPO.Lock_All_Tasks_List;
       C := All_Tasks_List;
 
       while C /= null loop
          R := STPO.Suspend_Task (C, Thread_Self);
          C := C.Common.All_Tasks_Link;
       end loop;
+
+      STPO.Unlock_All_Tasks_List;
    end Suspend_All_Tasks;
 
    ------------------------