diff options
| author | Grissiom <[email protected]> | 2014-06-18 11:16:21 +0800 |
|---|---|---|
| committer | Grissiom <[email protected]> | 2014-06-18 11:16:21 +0800 |
| commit | dc366ecf7a2946c8f071735f5f2065d51000240a (patch) | |
| tree | 1e2e42cc037b4e2b926f87ea26c0e5942c59e3da | |
| parent | 1dc376b2f48f49ed3ea84c381c7cd0c5c02e8ddb (diff) | |
device: only increase the ref_count when device is truly opened
| -rw-r--r-- | src/device.c | 12 |
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); |
