tools: Allow patlooptest to activate and handle buffer events
authorKinsey Moore <kmoore@digium.com>
Mon, 18 Apr 2011 21:20:10 +0000 (21:20 +0000)
committerKinsey Moore <kmoore@digium.com>
Mon, 18 Apr 2011 21:20:10 +0000 (21:20 +0000)
The new buffer events code introduced in revision 9905 gives userspace
processes an interface to activate detection of buffer over and underflows.
This change allows patlooptest to take advantage of that feature to better
inform users of the cause of pattern errors.

Acked-by: Shaun Ruffell <sruffell@digium.com>
(original patch by Matt Fredrickson)

git-svn-id: http://svn.astersk.org/svn/dahdi/tools/trunk@9909 17933a7a-c749-41c5-a318-cba88f637d49

patlooptest.c

index 4be399c..2ded0b2 100644 (file)
@@ -208,12 +208,13 @@ int main(int argc, char *argv[])
                        outbuf[x] = c1++;
                }
 
+write_again:
                res = write(fd,outbuf,bs);
                if (res != bs) {
-                       printf("Res is %d: %s\n", res, strerror(errno));
-                       ioctl(fd, DAHDI_GETEVENT, &x);
-                       printf("Event: %d\n", x);
-                       exit(1);
+                       printf("W: Res is %d: %s\n", res, strerror(errno));
+                       ioctl(fd, DAHDI_GETEVENT, &x);
+                       printf("Event: %d\n", x);
+                       goto write_again;
                }
 
                /* If this is the start of the test then skip a number of packets before test results */
@@ -225,13 +226,18 @@ int main(int argc, char *argv[])
                        if (!skipcount) {
                                printf("Going for it...\n");
                        }
+                       i = 1;
+                       ioctl(fd,DAHDI_BUFFER_EVENTS, &i);
                        continue;
                }
 
+read_again:
                res = read(fd, inbuf, bs);
                if (res < bs) {
-                       printf("read error: returned %d\n", res);
-                       exit(1);
+                       printf("R: Res is %d\n", res);
+                       ioctl(fd, DAHDI_GETEVENT, &x);
+                       printf("Event: %d\n", x);
+                       goto read_again;
                }
                /* If first time through, set byte that is used to test further bytes */
                if (!setup) {