This is Unofficial EPICS BASE Doxygen Site
osdSpin.c File Reference
#include <stdlib.h>
#include "cantProceed.h"
#include "errlog.h"
#include "epicsMutex.h"
#include "epicsSpin.h"
+ Include dependency graph for osdSpin.c:

Go to the source code of this file.

Classes

struct  epicsSpin
 

Typedefs

typedef struct epicsSpin epicsSpin
 

Functions

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

Typedef Documentation

typedef struct epicsSpin epicsSpin

Function Documentation

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
void epicsSpinDestroy ( epicsSpinId  spin)

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
epicsMutexId lock
Definition: osdSpin.c:25
void epicsSpinLock ( epicsSpinId  spin)

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&#39;s free if currently owned owned by a different thread...
Definition: epicsMutex.cpp:145
epicsMutexId lock
Definition: osdSpin.c:25
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
int epicsSpinTryLock ( epicsSpinId  spin)

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
epicsMutexId lock
Definition: osdSpin.c:25
void epicsSpinUnlock ( epicsSpinId  spin)

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
epicsMutexId lock
Definition: osdSpin.c:25