OpenMAXBellagio  0.9.3
queue.c
Go to the documentation of this file.
1 
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 
30 #include "queue.h"
31 #include "omx_comp_debug_levels.h"
32 
39  int i;
40  qelem_t* newelem;
41  qelem_t* current;
42  i = pthread_mutex_init(&queue->mutex, NULL);
43  if (i!=0) {
44  return -1;
45  }
46  queue->first = malloc(sizeof(qelem_t));
47  if (!(queue->first)) {
48  return -1;
49  }
50  memset(queue->first, 0, sizeof(qelem_t));
51  current = queue->last = queue->first;
52  queue->nelem = 0;
53  for (i = 0; i<MAX_QUEUE_ELEMENTS - 2; i++) {
54  newelem = malloc(sizeof(qelem_t));
55  if (!newelem) {
56  // the memory is not enough. Free all
57  while(queue->first!=NULL) {
58  current = queue->first->q_forw;
59  free(queue->first);
60  queue->first = current;
61  }
62  return -1;
63  }
64  memset(newelem, 0, sizeof(qelem_t));
65  current->q_forw = newelem;
66  current = newelem;
67  }
68  current->q_forw = queue->first;
69  return 0;
70 }
71 
78  int i;
79  qelem_t* current;
80  current = queue->first;
81  for (i = 0; i<MAX_QUEUE_ELEMENTS - 2; i++) {
82  if (current != NULL) {
83  current = current->q_forw;
84  free(queue->first);
85  queue->first = current;
86  }
87  }
88  if(queue->first) {
89  free(queue->first);
90  queue->first = NULL;
91  }
92  pthread_mutex_destroy(&queue->mutex);
93 }
94 
103 int queue(queue_t* queue, void* data) {
104  if (queue->last->data != NULL) {
105  return -1;
106  }
107  pthread_mutex_lock(&queue->mutex);
108  queue->last->data = data;
109  queue->last = queue->last->q_forw;
110  queue->nelem++;
111  pthread_mutex_unlock(&queue->mutex);
112  return 0;
113 }
114 
123  void* data;
124  if (queue->first->data == NULL) {
125  return NULL;
126  }
127  pthread_mutex_lock(&queue->mutex);
128  data = queue->first->data;
129  queue->first->data = NULL;
130  queue->first = queue->first->q_forw;
131  queue->nelem--;
132  pthread_mutex_unlock(&queue->mutex);
133 
134  return data;
135 }
136 
144  int qelem;
145  pthread_mutex_lock(&queue->mutex);
146  qelem = queue->nelem;
147  pthread_mutex_unlock(&queue->mutex);
148  return qelem;
149 }
void queue_deinit(queue_t *queue)
Definition: queue.c:77
int queue_init(queue_t *queue)
Definition: queue.c:38
Definition: queue.h:43
int queue(queue_t *queue, void *data)
Definition: queue.c:103
int getquenelem(queue_t *queue)
Definition: queue.c:143
Definition: queue.h:36
void * dequeue(queue_t *queue)
Definition: queue.c:122
qelem_t * q_forw
Definition: queue.h:37
#define MAX_QUEUE_ELEMENTS
Definition: queue.h:32

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