struct _nns_edge_queue_data_s
{
void *data;
- nns_edge_queue_data_destroy_cb destroy;
+ nns_edge_data_destroy_cb destroy;
nns_edge_queue_data_s *next;
};
nns_edge_queue_destroy (nns_edge_queue_h handle)
{
nns_edge_queue_s *q = (nns_edge_queue_s *) handle;
- nns_edge_queue_data_s *qdata;
if (!q) {
nns_edge_loge ("[Queue] Invalid param, queue is null.");
nns_edge_lock (q);
nns_edge_cond_signal (q);
- while ((qdata = q->head) != NULL) {
- if (qdata->destroy)
- qdata->destroy (qdata->data);
- q->head = qdata->next;
- free (qdata);
- }
+ while (q->length > 0U)
+ _pop_data (q, true);
- q->head = q->tail = NULL;
- q->length = 0U;
nns_edge_unlock (q);
nns_edge_cond_destroy (q);
*/
bool
nns_edge_queue_push (nns_edge_queue_h handle, void *data,
- nns_edge_queue_data_destroy_cb destroy)
+ nns_edge_data_destroy_cb destroy)
{
nns_edge_queue_s *q = (nns_edge_queue_s *) handle;
nns_edge_queue_data_s *qdata;
return false;
}
- qdata = calloc (1, sizeof (nns_edge_queue_data_s));
- if (!qdata) {
- nns_edge_loge ("[Queue] Failed to allocate new memory for data.");
- return false;
- }
-
- qdata->data = data;
- qdata->destroy = destroy;
-
nns_edge_lock (q);
if (q->max_data > 0U && q->length >= q->max_data) {
/* Clear old data in queue if leaky option is 'old'. */
}
}
+ qdata = calloc (1, sizeof (nns_edge_queue_data_s));
+ if (!qdata) {
+ nns_edge_loge ("[Queue] Failed to allocate new memory for data.");
+ goto done;
+ }
+
+ qdata->data = data;
+ qdata->destroy = destroy;
+
if (!q->head)
q->head = qdata;
if (q->tail)
#include <stdbool.h>
#include <sys/time.h>
+#include "nnstreamer-edge.h"
#ifdef __cplusplus
extern "C" {
typedef void *nns_edge_queue_h;
-/**
- * @brief Callback called when data in queue is released.
- */
-typedef void (*nns_edge_queue_data_destroy_cb) (void *data);
-
/**
* @brief Enumeration for the queue leaky option.
*/
* @param[in] destroy Nullable, the callback function to release data.
* @return true on success.
*/
-bool nns_edge_queue_push (nns_edge_queue_h handle, void *data, nns_edge_queue_data_destroy_cb destroy);
+bool nns_edge_queue_push (nns_edge_queue_h handle, void *data, nns_edge_data_destroy_cb destroy);
/**
* @brief Remove and return the first data in queue.