Buffer Uart bytes when not reading?

I have a task reading from the uart and handling data.  I'm using the uart adapter async api.

At first I was missing data at the process step pretty regularly so I enabled:

#define dg_configUART_RX_CIRCULAR_DMA (1)
#define dg_configUART2_RX_CIRCULAR_DMA_BUF_SIZE (128)

This seemed to help significantly.  At the time I enabled the dma buffer, my read task was similar to the following psuedo code:

while (1):
  read data (async) -> callback sets condition
  wait for condition:
   if timeout:
     quick check minor other items
   else:
     process data.

In this version, the task was waiting for ad_uart_read_async so the task was almost always in uart read state and then each timeout it did a quick loop and started waiting again.

But I need more time processing data so I was hoping to add a check to see if there was any pending data on the UART instead of waiting in the read function:

Psuedo code as follows:

while (1):
  if (UART has data):
   read data
   process data
  else:
   quick check minor other items.

In this version, I'm missing data again.  I used the function hw_uart_read_buf_empty to determine if there was any data but I'm not sure that is working properly.  I was under the impression that even while I'm not in the ad_uart_read function, the dma channel would add new uart data to the dma buffer and then next time around the loop the hw_uart_read_buf_empty would return false and I would know to call read instead of doing some processing work.

Am I going about this wrong?  Maybe I have a misunderstanding of the dma buffer.  I didn't see any way to get the information on buffer status from the adapter layer. 

Thank you for input.

-Dennis
SDK10.1.4.104