From bf1adc1e55cadbd2bcd37e7feee86b0fe72b717b Mon Sep 17 00:00:00 2001
From: Gregory Nutt <gnutt@nuttx.org>
Date: Wed, 15 Jul 2015 19:52:08 -0600
Subject: [PATCH] Another CAN driver fix:  From inspection, it appears that RTR
 counter was not being handled correctly

---
 drivers/can.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/can.c b/drivers/can.c
index 8a893856f4..4f2e5f9544 100644
--- a/drivers/can.c
+++ b/drivers/can.c
@@ -707,6 +707,7 @@ int can_register(FAR const char *path, FAR struct can_dev_s *dev)
   dev->cd_ocount     = 0;
   dev->cd_ntxwaiters = 0;
   dev->cd_nrxwaiters = 0;
+  dev->cd_npendrtr   = 0;
 
   sem_init(&dev->cd_xmit.tx_sem, 0, 0);
   sem_init(&dev->cd_recv.rx_sem, 0, 0);
@@ -716,7 +717,6 @@ int can_register(FAR const char *path, FAR struct can_dev_s *dev)
     {
       sem_init(&dev->cd_rtr[i].cr_sem, 0, 0);
       dev->cd_rtr[i].cr_msg = NULL;
-      dev->cd_npendrtr--;
     }
 
   /* Initialize/reset the CAN hardware */
@@ -798,6 +798,7 @@ int can_receive(FAR struct can_dev_s *dev, FAR struct can_hdr_s *hdr,
               /* Mark the entry unused */
 
               rtr->cr_msg = NULL;
+              dev->cd_npendrtr--;
 
               /* And restart the waiting thread */
 
-- 
GitLab