|
@@ -93,7 +93,7 @@ vcs_poll_data_free(struct vcs_poll_data *poll)
|
|
|
static struct vcs_poll_data *
|
|
|
vcs_poll_data_get(struct file *file)
|
|
|
{
|
|
|
- struct vcs_poll_data *poll = file->private_data;
|
|
|
+ struct vcs_poll_data *poll = file->private_data, *kill = NULL;
|
|
|
|
|
|
if (poll)
|
|
|
return poll;
|
|
@@ -122,10 +122,12 @@ vcs_poll_data_get(struct file *file)
|
|
|
file->private_data = poll;
|
|
|
} else {
|
|
|
/* someone else raced ahead of us */
|
|
|
- vcs_poll_data_free(poll);
|
|
|
+ kill = poll;
|
|
|
poll = file->private_data;
|
|
|
}
|
|
|
spin_unlock(&file->f_lock);
|
|
|
+ if (kill)
|
|
|
+ vcs_poll_data_free(kill);
|
|
|
|
|
|
return poll;
|
|
|
}
|