home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / emu / AROSdev.lha / AROS / rom / exec / vacate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-09  |  2.3 KB  |  99 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $Id: vacate.c,v 1.7 1997/01/01 03:46:17 ldp Exp $
  4.     $Log: vacate.c,v $
  5.     Revision 1.7  1997/01/01 03:46:17  ldp
  6.     Committed Amiga native (support) code
  7.  
  8.     Changed clib to proto
  9.  
  10.     Revision 1.6  1996/12/10 13:51:55  aros
  11.     Moved all #include's in the first column so makedepend can see it.
  12.  
  13.     Revision 1.5  1996/10/24 15:50:58  aros
  14.     Use the official AROS macros over the __AROS versions.
  15.  
  16.     Revision 1.4  1996/08/13 13:56:09  digulla
  17.     Replaced AROS_LA by AROS_LHA
  18.     Replaced some AROS_LH*I by AROS_LH*
  19.     Sorted and added includes
  20.  
  21.     Revision 1.3  1996/08/01 17:41:21  digulla
  22.     Added standard header for all files
  23.  
  24.     Desc:
  25.     Lang: english
  26. */
  27. #include "exec_intern.h"
  28. #include "semaphores.h"
  29. #include <exec/semaphores.h>
  30. #include <proto/exec.h>
  31.  
  32. /*****************************************************************************
  33.  
  34.     NAME */
  35.  
  36.     AROS_LH2(void, Vacate,
  37.  
  38. /*  SYNOPSIS */
  39.     AROS_LHA(struct SignalSemaphore  *, sigSem, A0),
  40.     AROS_LHA(struct SemaphoreMessage *, bidMsg, A1),
  41.  
  42. /*  LOCATION */
  43.     struct ExecBase *, SysBase, 91, Exec)
  44.  
  45. /*  FUNCTION
  46.     Release a lock obtained with Procure. This will even work if the
  47.     message is not yet replied - the request will be cancelled and the
  48.     message replied. In any case the ssm_Semaphore field will be set to
  49.     NULL.
  50.  
  51.     INPUTS
  52.     sigSem - Pointer to semaphore structure.
  53.     bidMsg - Pointer to struct SemaphoreMessage.
  54.  
  55.     RESULT
  56.  
  57.     NOTES
  58.  
  59.     EXAMPLE
  60.  
  61.     BUGS
  62.  
  63.     SEE ALSO
  64.     Procure()
  65.  
  66.     INTERNALS
  67.  
  68.     HISTORY
  69.     29-10-95    digulla automatically created from
  70.                 exec_lib.fd and clib/exec_protos.h
  71.  
  72. *****************************************************************************/
  73. {
  74.     AROS_LIBFUNC_INIT
  75.  
  76.     /* Arbitrate for the semaphore structure */
  77.     Forbid();
  78.  
  79.     /* Check if the message is still posted. */
  80.     if(bidMsg->ssm_Message.mn_Node.ln_Type==NT_MESSAGE)
  81.     {
  82.     /* Yes. Remove it from the semaphore's waiting queue. */
  83.     Remove(&bidMsg->ssm_Message.mn_Node);
  84.  
  85.     /* And reply the message. */
  86.     ReplyMsg(&bidMsg->ssm_Message);
  87.     }else
  88.     /* The semaphore is already locked. Release the lock. */
  89.     ReleaseSemaphore(sigSem);
  90.  
  91.     /* Clear the semaphore field. */
  92.     bidMsg->ssm_Semaphore=NULL;
  93.  
  94.     /* All done. */
  95.     Permit();
  96.     AROS_LIBFUNC_EXIT
  97. } /* Vacate */
  98.  
  99.