Merge pull request #2705 from phire/fixrumble

evdev: Delete rumble effects on the correct file descriptor.
This commit is contained in:
Scott Mansell 2015-07-13 12:05:54 +12:00
commit 87e19f1c19
2 changed files with 14 additions and 2 deletions

View File

@ -216,6 +216,12 @@ void evdevDevice::ForceFeedback::SetState(ControlState state)
// libevdev doesn't have nice helpers for forcefeedback
// we will use the file descriptors directly.
if (m_id != -1) // delete the previous effect (which also stops it)
{
ioctl(m_fd, EVIOCRMFF, m_id);
m_id = -1;
}
if (state > 0) // Upload and start an effect.
{
ff_effect effect;
@ -260,9 +266,14 @@ void evdevDevice::ForceFeedback::SetState(ControlState state)
write(m_fd, (const void*) &play, sizeof(play));
}
else if (m_id != -1) // delete the effect (which also stops it)
}
evdevDevice::ForceFeedback::~ForceFeedback()
{
// delete the uploaded effect, so we don't leak it.
if (m_id != -1)
{
ioctl(m_id, EVIOCRMFF, m_id);
ioctl(m_fd, EVIOCRMFF, m_id);
}
}

View File

@ -52,6 +52,7 @@ private:
public:
std::string GetName() const override;
ForceFeedback(u16 type, libevdev* dev) : m_type(type), m_dev(dev), m_id(-1) { m_fd = libevdev_get_fd(dev); }
~ForceFeedback();
void SetState(ControlState state) override;
private:
const u16 m_type;