summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrissiom <[email protected]>2014-06-18 11:16:21 +0800
committerGrissiom <[email protected]>2014-06-18 11:16:21 +0800
commitdc366ecf7a2946c8f071735f5f2065d51000240a (patch)
tree1e2e42cc037b4e2b926f87ea26c0e5942c59e3da
parent1dc376b2f48f49ed3ea84c381c7cd0c5c02e8ddb (diff)
device: only increase the ref_count when device is truly opened
-rw-r--r--src/device.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/device.c b/src/device.c
index 75b88bf6eb..7ee130041c 100644
--- a/src/device.c
+++ b/src/device.c
@@ -239,11 +239,6 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
return -RT_EBUSY;
}
- dev->ref_count++;
- /* don't let bad things happen silently. If you are bitten by this assert,
- * please set the ref_count to a bigger type. */
- RT_ASSERT(dev->ref_count != 0);
-
/* call device open interface */
if (dev->open != RT_NULL)
{
@@ -252,8 +247,15 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
/* set open flag */
if (result == RT_EOK || result == -RT_ENOSYS)
+ {
dev->open_flag = oflag | RT_DEVICE_OFLAG_OPEN;
+ dev->ref_count++;
+ /* don't let bad things happen silently. If you are bitten by this assert,
+ * please set the ref_count to a bigger type. */
+ RT_ASSERT(dev->ref_count != 0);
+ }
+
return result;
}
RTM_EXPORT(rt_device_open);