Changeset 706561a


Ignore:
Timestamp:
01/08/15 18:58:48 (6 years ago)
Author:
Richard Sanger <rsangerarj@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
0a1d2d0
Parents:
9b533c6
Message:

Fix regression in ring format caused by also calling poll even when data is ready.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_linux.c

    r9b533c6 r706561a  
    13431343        assert((((unsigned long) header) & (pagesize - 1)) == 0);
    13441344
    1345         while (1) {
     1345        /* TP_STATUS_USER means that we can use the frame.
     1346         * When a slot does not have this flag set, the frame is not
     1347         * ready for consumption.
     1348         */
     1349        while (!(header->tp_status & TP_STATUS_USER)) {
    13461350                if (message) {
    13471351                        struct pollfd pollset[2];
     
    13591363                                return -1;
    13601364                        }
    1361                         // Check for a message otherwise loop
     1365                        /* A message is ready */
    13621366                        if (pollset[1].revents)
    13631367                                return -2;
     
    13691373
    13701374                        /* Wait for more data or a message*/
    1371                 ret = poll(&pollset, 1, 500);
     1375                        ret = poll(&pollset, 1, 500);
    13721376                        if (ret < 0) {
    13731377                                if (errno != EINTR)
    13741378                                        trace_set_err(libtrace,errno,"poll()");
    13751379                                return -1;
    1376                 } else if (ret == 0) {
    1377                         /* Poll timed out - check if we should exit */
    1378                         if (libtrace_halt)
    1379                                 return 0;
    1380                         continue;
    1381                 }
    1382 
    1383                 /* TP_STATUS_USER means that we can use the frame.
    1384                  * When a slot does not have this flag set, the frame is not
    1385                  * ready for consumption.
    1386                  */
    1387                 if (header->tp_status & TP_STATUS_USER)
    1388                         break;
     1380                        } else if (ret == 0) {
     1381                                /* Poll timed out - check if we should exit */
     1382                                if (libtrace_halt)
     1383                                        return 0;
     1384                                continue;
     1385                        }
    13891386                }
    13901387        }
Note: See TracChangeset for help on using the changeset viewer.