From dfdcf8b34363ed2504347d00957a3606f82c0b0d Mon Sep 17 00:00:00 2001 From: Chase Douglas Date: Thu, 2 Feb 2012 13:19:15 -0800 Subject: [PATCH] Ensure delta computation does not go crazy I have seen this a couple times, but I haven't been able to catch it when it starts. It's a feedback loop, so once you miss the entrance of the loop, you can't see what really went wrong. This patch papers over the issue for now. Signed-off-by: Chase Douglas Acked-by: Daniel Stone Signed-off-by: Peter Hutterer --- src/synaptics.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/synaptics.c b/src/synaptics.c index a455b6f..181e88a 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -1974,6 +1974,14 @@ get_delta(SynapticsPrivate *priv, const struct SynapticsHwState *hw, /* report edge speed as synthetic motion. Of course, it would be * cooler to report floats than to buffer, but anyway. */ + + /* FIXME: When these values go NaN, bad things happen. Root cause is unknown + * thus far though. */ + if (isnan(priv->frac_x)) + priv->frac_x = 0; + if (isnan(priv->frac_y)) + priv->frac_y = 0; + tmpf = *dx + x_edge_speed * dtime + priv->frac_x; priv->frac_x = modf(tmpf, &integral); *dx = integral;