sound: oss: midibuf: fix sleep_on races
sleep_on is known to be racy and going away because of this. All instances of interruptible_sleep_on and interruptible_sleep_on_timeout in the midibuf driver can trivially be replaced with wait_event_interruptible and wait_event_interruptible_timeout. [fixed coding style warnings by tiwai] Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7bd6972a92
commit
76439c2ac6
1 changed files with 9 additions and 9 deletions
|
@ -86,9 +86,8 @@ static void drain_midi_queue(int dev)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (midi_devs[dev]->buffer_status != NULL)
|
if (midi_devs[dev]->buffer_status != NULL)
|
||||||
while (!signal_pending(current) && midi_devs[dev]->buffer_status(dev))
|
wait_event_interruptible_timeout(midi_sleeper[dev],
|
||||||
interruptible_sleep_on_timeout(&midi_sleeper[dev],
|
!midi_devs[dev]->buffer_status(dev), HZ/10);
|
||||||
HZ/10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void midi_input_intr(int dev, unsigned char data)
|
static void midi_input_intr(int dev, unsigned char data)
|
||||||
|
@ -233,8 +232,8 @@ void MIDIbuf_release(int dev, struct file *file)
|
||||||
* devices
|
* devices
|
||||||
*/
|
*/
|
||||||
|
|
||||||
while (!signal_pending(current) && DATA_AVAIL(midi_out_buf[dev]))
|
wait_event_interruptible(midi_sleeper[dev],
|
||||||
interruptible_sleep_on(&midi_sleeper[dev]);
|
!DATA_AVAIL(midi_out_buf[dev]));
|
||||||
/*
|
/*
|
||||||
* Sync
|
* Sync
|
||||||
*/
|
*/
|
||||||
|
@ -282,8 +281,8 @@ int MIDIbuf_write(int dev, struct file *file, const char __user *buf, int count)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
interruptible_sleep_on(&midi_sleeper[dev]);
|
if (wait_event_interruptible(midi_sleeper[dev],
|
||||||
if (signal_pending(current))
|
SPACE_AVAIL(midi_out_buf[dev])))
|
||||||
{
|
{
|
||||||
c = -EINTR;
|
c = -EINTR;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -325,8 +324,9 @@ int MIDIbuf_read(int dev, struct file *file, char __user *buf, int count)
|
||||||
c = -EAGAIN;
|
c = -EAGAIN;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
interruptible_sleep_on_timeout(&input_sleeper[dev],
|
wait_event_interruptible_timeout(input_sleeper[dev],
|
||||||
parms[dev].prech_timeout);
|
DATA_AVAIL(midi_in_buf[dev]),
|
||||||
|
parms[dev].prech_timeout);
|
||||||
|
|
||||||
if (signal_pending(current))
|
if (signal_pending(current))
|
||||||
c = -EINTR; /* The user is getting restless */
|
c = -EINTR; /* The user is getting restless */
|
||||||
|
|
Loading…
Reference in a new issue