summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2014-07-10 13:32:56 +1000
committerLorenz Meier <lm@inf.ethz.ch>2014-07-12 16:05:54 +0200
commitae43dd99849db279755eb4f434de28463c96fb7f (patch)
treead7183f98068e2d9f5910cb2eb1c48a8613e4acd
parent047ed5c93fc127163ec1fa2854f977962a94c2f5 (diff)
downloadnuttx-ae43dd99849db279755eb4f434de28463c96fb7f.tar.gz
nuttx-ae43dd99849db279755eb4f434de28463c96fb7f.tar.bz2
nuttx-ae43dd99849db279755eb4f434de28463c96fb7f.zip
stm32_i2c: ensure we don't change priv-> after semaphore is released
this prevents a race condition where a subsequent I2C transfer could be lost Many thanks to hxxnrx@gmail.com for reporting this bug
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_i2c.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/nuttx/arch/arm/src/stm32/stm32_i2c.c b/nuttx/arch/arm/src/stm32/stm32_i2c.c
index c6587d308..d91b00acf 100644
--- a/nuttx/arch/arm/src/stm32/stm32_i2c.c
+++ b/nuttx/arch/arm/src/stm32/stm32_i2c.c
@@ -1755,12 +1755,13 @@ static int stm32_i2c_process(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *ms
/* Re-enable the FSMC */
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;
+ stm32_i2c_sem_post(dev);
+
return -errval;
}