home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / s-taenca.ads < prev    next >
Text File  |  1996-09-28  |  5KB  |  103 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  4. --                                                                          --
  5. --             S Y S T E M . T A S K I N G . E N T R Y _ C A L L S          --
  6. --                                                                          --
  7. --                                  S p e c                                 --
  8. --                                                                          --
  9. --                             $Revision: 1.1 $                             --
  10. --                                                                          --
  11. --       Copyright (c) 1991,1992,1993,1994, FSU, All Rights Reserved        --
  12. --                                                                          --
  13. -- GNARL is free software; you can redistribute it  and/or modify it  under --
  14. -- terms  of  the  GNU  Library General Public License  as published by the --
  15. -- Free Software  Foundation;  either version 2, or (at  your  option)  any --
  16. -- later  version.  GNARL is distributed  in the hope that  it will be use- --
  17. -- ful, but but WITHOUT ANY WARRANTY;  without even the implied warranty of --
  18. -- MERCHANTABILITY  or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  19. -- eral Library Public License  for more details.  You should have received --
  20. -- a  copy of the GNU Library General Public License along with GNARL;  see --
  21. -- file COPYING.LIB.  If not,  write to the  Free Software Foundation,  675 --
  22. -- Mass Ave, Cambridge, MA 02139, USA.                                      --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. --  This package provides internal RTS calls implementing operations
  27. --  that apply to general entry calls, that is, calls to either
  28. --  protected or task entries.
  29. --  These declarations are not part of the GNARLI
  30.  
  31. with Unchecked_Conversion;
  32.  
  33. with System.Compiler_Exceptions;
  34. --  Used for, Exception_ID
  35.  
  36. package System.Tasking.Entry_Calls is
  37.  
  38.    procedure Internal_Lock
  39.      (Object : access Protection;
  40.       Ceiling_Violation : out Boolean);
  41.    --  This version of lock is used internally to lock a protected
  42.    --  object. It returns a Ceiling_Violation flag instead of raising
  43.    --  program error, avoiding the need for exception handlers in the
  44.    --  runtime to clean up after a ceiling violation.
  45.  
  46.    procedure Internal_Lock_Read_Only
  47.      (Object : access Protection;
  48.       Ceiling_Violation : out Boolean);
  49.    --  This version of lock is used internally to lock a protected
  50.    --  object for read access.
  51.    --  It returns a Ceiling_Violation flag instead of raising
  52.    --  program error, avoiding the need for exception handlers in the
  53.    --  runtime to clean up after a ceiling violation.
  54.  
  55.    procedure Lock_Server
  56.       (Entry_Call : Entry_Call_Link;
  57.        No_Server  : out Boolean);
  58.    --  This locks the server targeted by Entry_Call, returning
  59.    --  No_Server=True if no server is currently targeted.
  60.    --  This may be a task or a protected object, depending on the
  61.    --  target of the original call or any subsequent requeues.
  62.    --  It will fail if there is no such target.
  63.    --  This routine is needed because the field specifying the server
  64.    --  for this call must be protected by the server's mutex.  If it were
  65.    --  protected by the caller's mutex, accessing the server's queues would
  66.    --  require locking the caller to get the server, locking the server,
  67.    --  and then accessing the queues.  This involves holding two ATCB
  68.    --  locks at once, something which we can guarantee that it will always
  69.    --  be done in the same order, or locking a protected object while we
  70.    --  hold an ATCB lock, something which is not permitted.  Since
  71.    --  the server cannot be obtained reliably, it must be obtained unreliably
  72.    --  and then checked again once it has been locked.
  73.  
  74.    procedure Unlock_Server (Entry_Call : Entry_Call_Link);
  75.    --  Unlock the server targeted by Entry_Call.  The server must
  76.    --  be locked before calling this.
  77.  
  78.    procedure Unlock_And_Update_Server (Entry_Call : Entry_Call_Link);
  79.    --  Similar to Unlock_Server, but services entry calls if the
  80.    --  server is a protected object.
  81.  
  82.    procedure Enqueue_Call (Entry_Call : Entry_Call_Link);
  83.    procedure Dequeue_Call (Entry_Call : Entry_Call_Link);
  84.    --  Enqueue (dequeue) the call to (from) whatever server they are
  85.    --  calling, whether a task or a protected object.
  86.  
  87.    procedure Wait_For_Completion (Entry_Call : Entry_Call_Link);
  88.    --  This procedure suspends the calling task until the specified entry
  89.    --  call has either been completed or cancelled.  It performs other
  90.    --  operations required of suspended tasks, such as performing
  91.    --  dynamic priority changes.  On exit, the call will not be queued.
  92.    --  This waits for calls on task or protected entries.
  93.    --  Abortion must be deferred when calling this procedure.
  94.  
  95.    procedure Wait_Until_Abortable
  96.      (Caller : Task_ID;
  97.       Call   : Entry_Call_Link);
  98.    --  This procedure suspends the calling task until the specified entry
  99.    --  call is queued abortably or completes.
  100.    --  Abortion must be deferred when calling this procedure.
  101.  
  102. end System.Tasking.Entry_Calls;
  103.