From b77beb3a51afee96b2e10e19b005c25225b3618c Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 12 Jul 2014 16:05:06 +0200 Subject: Revert "Revert "stm32_i2c: ensure that unexpected ISR can't overwrite stale data"" This reverts commit 7a7a07ed0ec492b3ab9f87467189886a66b2fc1a. --- nuttx/arch/arm/src/stm32/stm32_i2c.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/nuttx/arch/arm/src/stm32/stm32_i2c.c b/nuttx/arch/arm/src/stm32/stm32_i2c.c index c02bf4543..996e8af39 100644 --- a/nuttx/arch/arm/src/stm32/stm32_i2c.c +++ b/nuttx/arch/arm/src/stm32/stm32_i2c.c @@ -1600,7 +1600,12 @@ static int stm32_i2c_process(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *ms stm32_i2c_clrstart(priv); /* Old transfers are done */ - + + /* reset ptr and dcnt to ensure an unexpected data + interrupt doesn't overwrite stale data */ + priv->dcnt = 0; + priv->ptr = NULL; + priv->msgv = msgs; priv->msgc = count; @@ -1751,6 +1756,10 @@ static int stm32_i2c_process(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *ms stm32_i2c_enablefsmc(ahbenr); stm32_i2c_sem_post(dev); + + /* ensure that any ISR happening after we finish can't overwrite any user data */ + priv->dcnt = 0; + priv->ptr = NULL; return -errval; } -- cgit v1.2.3