diff --git a/[refs] b/[refs] index 65816218e577..9a3f0e022057 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b36b505965e374b284166c2e6b9c1d369d663ea9 +refs/heads/master: 78c87e863bb3350426fecd14912fd0a546c58ec0 diff --git a/trunk/drivers/media/video/v4l2-event.c b/trunk/drivers/media/video/v4l2-event.c index 9f56f18d509f..4d01f17497f6 100644 --- a/trunk/drivers/media/video/v4l2-event.c +++ b/trunk/drivers/media/video/v4l2-event.c @@ -285,6 +285,7 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh, { struct v4l2_subscribed_event *sev; unsigned long flags; + int i; if (sub->type == V4L2_EVENT_ALL) { v4l2_event_unsubscribe_all(fh); @@ -295,6 +296,11 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh, sev = v4l2_event_subscribed(fh, sub->type, sub->id); if (sev != NULL) { + /* Remove any pending events for this subscription */ + for (i = 0; i < sev->in_use; i++) { + list_del(&sev->events[sev_pos(sev, i)].list); + fh->navailable--; + } list_del(&sev->list); sev->fh = NULL; }