changeset 1379:59a0c235fb65

Fix potential infinite loop
author gthomas
date Fri, 21 Nov 2003 19:06:45 +0000
parents 0c616bec0b15
children 44c872c79d5f
files packages/devs/serial/arm/at91/current/ChangeLog packages/devs/serial/arm/at91/current/src/at91_serial.c
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/serial/arm/at91/current/ChangeLog
+++ b/packages/devs/serial/arm/at91/current/ChangeLog
@@ -1,3 +1,8 @@
+2003-11-21  Thomas Koeller  <thomas.koeller@baslerweb.com>
+
+	* src/at91_serial.c: Fix endless loop that would occur if
+	high-level driver was not ready to accept data received.
+
 2003-11-07  Thomas Koeller  <thomas.koeller@baslerweb.com>
 
 	* src/at91_serial.c:
--- a/packages/devs/serial/arm/at91/current/src/at91_serial.c
+++ b/packages/devs/serial/arm/at91/current/src/at91_serial.c
@@ -64,6 +64,7 @@
 #include <cyg/io/serial.h>
 #include <cyg/infra/diag.h>
 #include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_ass.h>
 
 externC void * memcpy( void *, const void *, size_t );
 
@@ -555,6 +556,9 @@ at91_serial_DSR(cyg_vector_t vector, cyg
                     break;
                 default:
                     // Buffer full or unknown error, can't do anything about it
+                    // Discard data
+                    CYG_FAIL("Serial receiver buffer overflow");
+                    p = end;
                     break;
             }
         }