fixup: pty: possible memory leaking on close()
The ref_count of the vnode is NOT bound to the resource reference counts of the ptm device created by opening `dev/ptmx`, so the conditional release of resource may end up by memory leaking if the multiple user have open the `dev/ptmx`. Changes: - Removed conditional branch on recycling resource Signed-off-by: Shell <smokewood@qq.com>
This commit is contained in:
parent
87906499a3
commit
210cd71128
|
@ -27,7 +27,6 @@ static int ptm_fops_open(struct dfs_file *file)
|
||||||
rt_uint32_t oflags = file->flags;
|
rt_uint32_t oflags = file->flags;
|
||||||
rt_thread_t cur_thr = rt_thread_self();
|
rt_thread_t cur_thr = rt_thread_self();
|
||||||
|
|
||||||
/* we don't check refcnt because each open will create a new device */
|
|
||||||
if (file->vnode && file->vnode->data)
|
if (file->vnode && file->vnode->data)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -61,18 +60,11 @@ static int ptm_fops_close(struct dfs_file *file)
|
||||||
rt_device_t device;
|
rt_device_t device;
|
||||||
|
|
||||||
if (file->data)
|
if (file->data)
|
||||||
{
|
|
||||||
if (file->vnode->ref_count != 1)
|
|
||||||
{
|
|
||||||
rc = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
device = (rt_device_t)file->data;
|
device = (rt_device_t)file->data;
|
||||||
tp = rt_container_of(device, struct lwp_tty, parent);
|
tp = rt_container_of(device, struct lwp_tty, parent);
|
||||||
rc = bsd_ptsdev_methods.fo_close(tp, rt_thread_self());
|
rc = bsd_ptsdev_methods.fo_close(tp, rt_thread_self());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
|
|
Loading…
Reference in New Issue