odp_buffer_hdr_t *pktin_dequeue(queue_entry_t *qentry)
{
	odp_buffer_hdr_t *buf_hdr;

	buf_hdr = queue_deq(qentry);

	if (buf_hdr == NULL) {
		odp_packet_t pkt;
		odp_buffer_t buf;
		odp_packet_t pkt_tbl[QUEUE_MULTI_MAX];
		odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX];
		int pkts, i, j;

		pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl,
				      QUEUE_MULTI_MAX);

		if (pkts > 0) {
			pkt = pkt_tbl[0];
			buf = odp_buffer_from_packet(pkt);
			buf_hdr = odp_buf_to_hdr(buf);

			for (i = 1, j = 0; i < pkts; ++i) {
				buf = odp_buffer_from_packet(pkt_tbl[i]);
				tmp_hdr_tbl[j++] = odp_buf_to_hdr(buf);
			}
			queue_enq_multi(qentry, tmp_hdr_tbl, j);
		}
	}

	return buf_hdr;
}
odp_buffer_hdr_t *pktin_dequeue(queue_entry_t *queue)
{
	odp_buffer_hdr_t *buf_hdr;
	buf_hdr = queue_deq(queue);

	update_in_packet(buf_hdr, queue->s.pktin);
	return buf_hdr;
}
Exemple #3
0
int main()
{
	char buf[MSG_SIZE];
    int ch, e;
	queue q;
    printf("\n 1 - Enque");
    printf("\n 2 - Deque");
    printf("\n 3 - Front element");
    printf("\n 4 - Empty");
    printf("\n 5 - Exit");
    printf("\n 6 - Display");
    printf("\n 7 - Queue size");
    queue_create(&q);
    while (1)
    {
        printf("\n Enter choice : ");
        scanf("%d", &ch);
        switch (ch)
        {
        case 1:
            printf("Enter data : ");
            scanf("%s", buf);
            queue_enq(&q, buf);
            break;
        case 2:
            e = queue_deq(&q, buf);
            puts(buf);
            if (e == 0)
                printf("Front element : %s", buf);
            else
                printf("\n No front element in Queue as queue is empty");
            break;
        case 3:
            e = queue_peek(&q, buf);
            puts(buf);
            if (e == 0)
                printf("Front element : %s", buf);
            else
                printf("\n No front element in Queue as queue is empty");
            break;
        case 4:
            queue_empty(&q);
            break;
        case 5:
            exit(0);
        case 6:
            queue_display(&q);
            break;
        case 7:
            queue_size(&q);
            break;
        default:
            printf("Wrong choice, Please enter correct choice  ");
            break;
        }
    }
    return 0;
}
/*
* removes and returns the data of the
* first element of the priority queue q
*/
void *queue_head(struct queue *q) {
	void *data;
	int i;

	i = pulse % NUM_EVENT_QUEUES;

	if (!q->head[i])
		return NULL;

	data = q->head[i]->data;
	queue_deq(q, q->head[i]);
	return data;
}
/* removes the event from the system */
void event_cancel(struct event *event) {
	if (!event) {
		log("SYSERR:  Attempted to cancel a NULL event");
		return;
	}

	if (!event->q_el) {
		log("SYSERR:  Attempted to cancel a non-NULL unqueued event, freeing anyway");
	}
	else
		queue_deq(event_q, event->q_el);

	if (event->event_obj)
		free(event->event_obj);
	free(event);
}
Exemple #6
0
void
test_empty (queue_t queue)
{
  /* Test size empty*/
  if (queue_size (queue) != 0)
    {
      printf ("Empty Queue: Size Failed\n");
      exit (EXIT_FAILURE);
    }

  /* Test peek and deq */
  if (queue_peek (queue) != NULL ||
      queue_deq (queue) != NULL)
    {
      printf ("Empty Queue: Peek / Deq Failed\n");
      exit (EXIT_FAILURE);
    }
}
Exemple #7
0
void *
consume(void *args)
{
	char *buf;
	int *bla = args;
	int id = *bla;

	printf("Consumer %d launched, waiting for producer...\n", id);
	while ((buf = queue_deq(q)))
	{
		printf("Consumer %d ate '%s'\n", id, buf);
		fflush(stdout);
		free(buf);
#ifndef NOSLEEP
		usleep(random() % 100000);
#endif
	}
	printf("Consumer %d got a NULL, queue consumed, bye!\n", id);
	return 0;
}
Exemple #8
0
void free_queue(queue_t * queue)
{
	while (queue_deq(queue) != NULL);
	free(queue->head);
	free(queue);
}
Exemple #9
0
int
main (int argc, char ** argv)
{
  queue_t queue;
  size_t i, j, size;
  stack_t stack_in, stack_out;

  /* Create a new queue */
  queue = queue_init ();
  if (queue == NULL)
    {
      printf ("Failed to initialize the initial queue\n");
      return 99;
    }

  /* Test empty queue */
  test_empty (queue);

  /* Test a few inserts */
  size = 10;
  for (i = 0; i < size; i++)
    if (queue_enq (queue, (void*)i) == QUEUE_MALLOC_FAILED)
      {
	printf ("Insert: Malloc failed\n");
	return 99;
      }
  if (size != queue_size (queue))
    {
      printf ("Few Inserts: Size Failed\n");
      return EXIT_FAILURE;
    }
  for (i = 0; i < size; i++)
    if (queue_peek (queue) != (void*)i ||
	queue_deq (queue) != (void*)i)
      {
	printf ("Few Inserts: Integrity Failed\n");
	return EXIT_FAILURE;
      }

  /* Test Clear */
  queue_clear (queue);
  test_empty (queue);

  /* Test Many Inserts */
  size = 10000;
  stack_in = stack_init ();
  stack_out = stack_init ();
  if (stack_in == NULL || stack_out == NULL)
    {
      printf ("Failed to create stacks\n");
      return 99;
    }
  for (i = 0; i < size; i++)
    {
      /* Queue the elements */
      stack_push (stack_in, (void*)i);
      queue_enq (queue, (void*)i);

      /* Queue and dequeue many elements */
      for (j = 0; j < 100; j++)
	{
	  stack_push (stack_in, (void*)i);
	  queue_enq (queue, (void*)i);

	  /* Check the queue */
	  if (queue_peek (queue) != peek (stack_in, stack_out) ||
	      queue_deq (queue) != deq (stack_in, stack_out))
	    {
	      printf ("Many Inserts: Integrity Failed\n");
	      return EXIT_FAILURE;
	    }
	}
    }
  if (size != queue_size (queue))
    {
      printf ("Many Inserts: Size Failure\n");
      return EXIT_FAILURE;
    }
  for (i = 0; i < size; i++)
    if (queue_peek (queue) != peek (stack_in, stack_out) ||
	queue_deq (queue) != deq (stack_in, stack_out))
      {
	printf ("Many Inserts: Integrity Failed\n");
	return EXIT_FAILURE;
      }
  stack_destroy (stack_in);
  stack_destroy (stack_out);

  /* Destroy the queue */
  queue_destroy (queue);

  return EXIT_SUCCESS;
}