|
@@ -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;
|
|
|
}
|