summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Douglas <chase.douglas@canonical.com>2012-02-02 13:19:15 -0800
committerPeter Hutterer <peter.hutterer@who-t.net>2012-02-06 23:51:54 +1000
commitdfdcf8b34363ed2504347d00957a3606f82c0b0d (patch)
tree6024175e953b38b24b669e0d06b812e9d2a4586c
parent782c7fb6fe20ed21b02808096de12d3cbf1afc8b (diff)
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 <chase.douglas@canonical.com> Acked-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/synaptics.c8
1 files changed, 8 insertions, 0 deletions
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;