OpenMAXBellagio  0.9.3
tsemaphore.c
Go to the documentation of this file.
1 
27 #include <pthread.h>
28 #include <sys/time.h>
29 #include <errno.h>
30 #include "tsemaphore.h"
31 #include "omx_comp_debug_levels.h"
32 
39 OSCL_EXPORT_REF int tsem_init(tsem_t* tsem, unsigned int val) {
40  int i;
41  i = pthread_cond_init(&tsem->condition, NULL);
42  if (i!=0) {
43  return -1;
44  }
45  i = pthread_mutex_init(&tsem->mutex, NULL);
46  if (i!=0) {
47  return -1;
48  }
49  tsem->semval = val;
50  return 0;
51 }
52 
58  pthread_cond_destroy(&tsem->condition);
59  pthread_mutex_destroy(&tsem->mutex);
60 }
61 
69 OSCL_EXPORT_REF int tsem_timed_down(tsem_t* tsem, unsigned int milliSecondsDelay) {
70  int err = 0;
71  struct timespec final_time;
72  struct timeval currentTime;
73  long int microdelay;
74 
75  gettimeofday(&currentTime, NULL);
77  microdelay = ((milliSecondsDelay * 1000 + currentTime.tv_usec));
78  final_time.tv_sec = currentTime.tv_sec + (microdelay / 1000000);
79  final_time.tv_nsec = (microdelay % 1000000) * 1000;
80  pthread_mutex_lock(&tsem->mutex);
81  while (tsem->semval == 0) {
82  err = pthread_cond_timedwait(&tsem->condition, &tsem->mutex, &final_time);
83  if (err != 0) {
84  tsem->semval--;
85  }
86  }
87  tsem->semval--;
88  pthread_mutex_unlock(&tsem->mutex);
89  return err;
90 }
91 
98  pthread_mutex_lock(&tsem->mutex);
99  while (tsem->semval == 0) {
100  pthread_cond_wait(&tsem->condition, &tsem->mutex);
101  }
102  tsem->semval--;
103  pthread_mutex_unlock(&tsem->mutex);
104 }
105 
111  pthread_mutex_lock(&tsem->mutex);
112  tsem->semval++;
113  pthread_cond_signal(&tsem->condition);
114  pthread_mutex_unlock(&tsem->mutex);
115 }
116 
122  pthread_mutex_lock(&tsem->mutex);
123  tsem->semval=0;
124  pthread_mutex_unlock(&tsem->mutex);
125 }
126 
132  pthread_mutex_lock(&tsem->mutex);
133  pthread_cond_wait(&tsem->condition, &tsem->mutex);
134  pthread_mutex_unlock(&tsem->mutex);
135 }
136 
142  pthread_mutex_lock(&tsem->mutex);
143  pthread_cond_signal(&tsem->condition);
144  pthread_mutex_unlock(&tsem->mutex);
145 }
146 
tsem_t::mutex
pthread_mutex_t mutex
Definition: tsemaphore.h:40
tsem_up
void tsem_up(tsem_t *tsem)
Definition: tsemaphore.c:110
omx_comp_debug_levels.h
tsem_t::semval
unsigned int semval
Definition: tsemaphore.h:41
tsem_reset
void tsem_reset(tsem_t *tsem)
Definition: tsemaphore.c:121
tsem_down
void tsem_down(tsem_t *tsem)
Definition: tsemaphore.c:97
tsem_signal
void tsem_signal(tsem_t *tsem)
Definition: tsemaphore.c:141
tsemaphore.h
tsem_wait
void tsem_wait(tsem_t *tsem)
Definition: tsemaphore.c:131
tsem_t::condition
pthread_cond_t condition
Definition: tsemaphore.h:39
tsem_t
Definition: tsemaphore.h:38
tsem_deinit
void tsem_deinit(tsem_t *tsem)
Definition: tsemaphore.c:57
OSCL_EXPORT_REF
#define OSCL_EXPORT_REF
Definition: omx_base_component.h:43
tsem_init
int tsem_init(tsem_t *tsem, unsigned int val)
Definition: tsemaphore.c:39
err
OMX_ERRORTYPE err
Definition: omxvolcontroltest.c:34
tsem_timed_down
int tsem_timed_down(tsem_t *tsem, unsigned int milliSecondsDelay)
Definition: tsemaphore.c:69

Generated for OpenMAX Bellagio rel. 0.9.3 by  doxygen 1.5.1
SourceForge.net Logo