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

Go to the source code of this file.

Classes

struct  epicsSpin
 

Macros

#define checkStatus(status, message)
 

Typedefs

typedef struct epicsSpin epicsSpin
 

Functions

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

Macro Definition Documentation

#define checkStatus (   status,
  message 
)
Value:
if ((status)) { \
errlogPrintf("epicsSpin %s failed: error %s\n", \
(message), strerror((status))); \
}
pvd::Status status
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105

Definition at line 34 of file osdSpin.c.

Typedef Documentation

typedef struct epicsSpin epicsSpin

Function Documentation

epicsSpinId epicsSpinCreate ( void  )

Definition at line 115 of file osdSpin.c.

115  {
116  epicsSpin *spin;
117  int status;
118 
119  spin = calloc(1, sizeof(*spin));
120  if (!spin)
121  goto fail;
122 
123  status = pthread_mutex_init(&spin->lock, NULL);
124  checkStatus(status, "pthread_mutex_init");
125  if (status)
126  goto fail;
127 
128  return spin;
129 
130 fail:
131  free(spin);
132  return NULL;
133 }
pvd::Status status
#define NULL
Definition: catime.c:38
#define checkStatus(status, message)
Definition: osdSpin.c:34
epicsMutexId lock
Definition: osdSpin.c:25
void epicsSpinDestroy ( epicsSpinId  spin)

Definition at line 135 of file osdSpin.c.

135  {
136  int status;
137 
138  status = pthread_mutex_destroy(&spin->lock);
139  checkStatus(status, "pthread_mutex_destroy");
140 
141  free(spin);
142 }
pvd::Status status
#define checkStatus(status, message)
Definition: osdSpin.c:34
epicsMutexId lock
Definition: osdSpin.c:25
void epicsSpinLock ( epicsSpinId  spin)

Definition at line 144 of file osdSpin.c.

144  {
145  int status;
146 
147  status = pthread_mutex_lock(&spin->lock);
148  checkStatus(status, "pthread_mutex_lock");
149  if (status)
150  cantProceed(NULL);
151 }
pvd::Status status
#define NULL
Definition: catime.c:38
LIBCOM_API void cantProceed(const char *msg,...)
Definition: cantProceed.c:54
#define checkStatus(status, message)
Definition: osdSpin.c:34
epicsMutexId lock
Definition: osdSpin.c:25
epicsSpinId epicsSpinMustCreate ( void  )

Definition at line 173 of file osdSpin.c.

174 {
176  if(!ret)
177  cantProceed("epicsSpinMustCreate: epicsSpinCreate failed.");
178  return ret;
179 }
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 153 of file osdSpin.c.

153  {
154  int status;
155 
156  status = pthread_mutex_trylock(&spin->lock);
157  if (status == EBUSY)
158  return 1;
159  checkStatus(status, "pthread_mutex_trylock");
160  return status;
161 }
pvd::Status status
#define checkStatus(status, message)
Definition: osdSpin.c:34
epicsMutexId lock
Definition: osdSpin.c:25
void epicsSpinUnlock ( epicsSpinId  spin)

Definition at line 163 of file osdSpin.c.

163  {
164  int status;
165 
166  status = pthread_mutex_unlock(&spin->lock);
167  checkStatus(status, "pthread_mutex_unlock");
168 }
pvd::Status status
#define checkStatus(status, message)
Definition: osdSpin.c:34
epicsMutexId lock
Definition: osdSpin.c:25