mirror of https://gerrit.osmocom.org/gapk
procqueue: store output buffers inside queue items
An output buffer belongs to its queue item, so it will be more correctly to store its pointer inside the osmo_gapk_pq_item.
This commit is contained in:
parent
3be9c7ae3c
commit
304fa73421
|
@ -29,6 +29,8 @@ struct osmo_gapk_pq_item {
|
|||
unsigned int len_out;
|
||||
/*! opaque state */
|
||||
void *state;
|
||||
/*! buffer for output data */
|
||||
uint8_t *buf;
|
||||
/*! call-back for actual format conversion function
|
||||
* \param[in] state opaque state pointer
|
||||
* \param[out] out caller-allocated buffer for output data
|
||||
|
@ -45,7 +47,6 @@ struct osmo_gapk_pq_item {
|
|||
struct osmo_gapk_pq {
|
||||
unsigned n_items;
|
||||
struct osmo_gapk_pq_item *items[MAX_PQ_ITEMS];
|
||||
void *buffers[MAX_PQ_ITEMS + 1];
|
||||
};
|
||||
|
||||
/* Processing queue management */
|
||||
|
|
|
@ -45,12 +45,11 @@ osmo_gapk_pq_destroy(struct osmo_gapk_pq *pq)
|
|||
continue;
|
||||
if (pq->items[i]->exit)
|
||||
pq->items[i]->exit(pq->items[i]->state);
|
||||
|
||||
free(pq->items[i]->buf);
|
||||
free(pq->items[i]);
|
||||
}
|
||||
|
||||
for (i=0; i<pq->n_items-1; i++)
|
||||
free(pq->buffers[i]); /* free is NULL safe */
|
||||
|
||||
free(pq);
|
||||
}
|
||||
|
||||
|
@ -103,8 +102,9 @@ osmo_gapk_pq_prepare(struct osmo_gapk_pq *pq)
|
|||
* known buffer size */
|
||||
if (!buf_size)
|
||||
buf_size = VAR_BUF_SIZE;
|
||||
pq->buffers[i] = malloc(buf_size);
|
||||
if (!pq->buffers[i])
|
||||
|
||||
item->buf = malloc(buf_size);
|
||||
if (!item->buf)
|
||||
return -ENOMEM;
|
||||
} else{
|
||||
if (item->len_out)
|
||||
|
@ -134,7 +134,7 @@ osmo_gapk_pq_execute(struct osmo_gapk_pq *pq)
|
|||
int rv;
|
||||
struct osmo_gapk_pq_item *item = pq->items[i];
|
||||
|
||||
buf = i < (pq->n_items-1) ? pq->buffers[i] : NULL;
|
||||
buf = i < (pq->n_items-1) ? item->buf : NULL;
|
||||
|
||||
rv = item->proc(item->state, buf, buf_prev, len_prev);
|
||||
if (rv < 0) {
|
||||
|
|
Loading…
Reference in New Issue