This is Unofficial EPICS BASE Doxygen Site
epicsSpin.h File Reference
#include "libComAPI.h"
+ Include dependency graph for epicsSpin.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef struct epicsSpinepicsSpinId
 

Functions

LIBCOM_API epicsSpinId epicsSpinCreate (void)
 
LIBCOM_API epicsSpinId epicsSpinMustCreate (void)
 
LIBCOM_API void epicsSpinDestroy (epicsSpinId)
 
LIBCOM_API void epicsSpinLock (epicsSpinId)
 
LIBCOM_API int epicsSpinTryLock (epicsSpinId)
 
LIBCOM_API void epicsSpinUnlock (epicsSpinId)
 

Typedef Documentation

typedef struct epicsSpin* epicsSpinId

Definition at line 18 of file epicsSpin.h.

Function Documentation

LIBCOM_API epicsSpinId epicsSpinCreate ( void  )

Definition at line 28 of file osdSpin.c.

28  {
29  epicsSpin *spin;
30 
31  spin = calloc(1, sizeof(*spin));
32  if (!spin)
33  goto fail;
34 
35  spin->lock = epicsMutexCreate();
36  if (!spin->lock)
37  goto fail;
38 
39  return spin;
40 
41 fail:
42  free(spin);
43  return NULL;
44 }
#define NULL
Definition: catime.c:38
#define epicsMutexCreate()
Create an epicsMutex semaphore for use from C code.
Definition: epicsMutex.h:168
epicsMutexId lock
Definition: osdSpin.c:25
LIBCOM_API void epicsSpinDestroy ( epicsSpinId  )

Definition at line 54 of file osdSpin.c.

54  {
55  epicsMutexDestroy(spin->lock);
56  free(spin);
57 }
void epicsStdCall epicsMutexDestroy(epicsMutexId pmutexNode)
Destroy an epicsMutex semaphore.
Definition: epicsMutex.cpp:127
LIBCOM_API void epicsSpinLock ( epicsSpinId  )

Definition at line 59 of file osdSpin.c.

59  {
61 
62  status = epicsMutexLock(spin->lock);
63  if (status != epicsMutexLockOK) {
64  errlogPrintf("epicsSpinLock(%p): epicsMutexLock returned %s\n", spin,
65  status == epicsMutexLockTimeout ?
66  "epicsMutexLockTimeout" : "epicsMutexLockError");
67  }
68 }
pvd::Status status
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
epicsMutexLockStatus
Definition: epicsMutex.h:51
epicsMutexLockStatus epicsStdCall epicsMutexLock(epicsMutexId pmutexNode)
Claim the semaphore, waiting until it's free if currently owned owned by a different thread...
Definition: epicsMutex.cpp:145
LIBCOM_API epicsSpinId epicsSpinMustCreate ( void  )

Definition at line 46 of file osdSpin.c.

47 {
49  if(!ret)
50  cantProceed("epicsSpinMustCreate: epicsSpinCreate failed.");
51  return ret;
52 }
LIBCOM_API void cantProceed(const char *msg,...)
Definition: cantProceed.c:54
epicsSpinId epicsSpinCreate(void)
Definition: osdSpin.c:28
LIBCOM_API int epicsSpinTryLock ( epicsSpinId  )

Definition at line 70 of file osdSpin.c.

70  {
72 
73  status = epicsMutexTryLock(spin->lock);
74  if (status == epicsMutexLockOK) return 0;
75  if (status == epicsMutexLockTimeout) return 1;
76 
77  errlogPrintf("epicsSpinTryLock(%p): epicsMutexTryLock returned epicsMutexLockError\n", spin);
78  return 2;
79 }
pvd::Status status
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
epicsMutexLockStatus
Definition: epicsMutex.h:51
epicsMutexLockStatus epicsStdCall epicsMutexTryLock(epicsMutexId pmutexNode)
Similar to epicsMutexLock() except that the call returns immediately, with the return status indicati...
Definition: epicsMutex.cpp:158
LIBCOM_API void epicsSpinUnlock ( epicsSpinId  )

Definition at line 81 of file osdSpin.c.

81  {
82  epicsMutexUnlock(spin->lock);
83 }
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140