Date: Thu, 24 Oct 2002 12:54:47 +0100 From: "Peter Edwards" <pmedwards@eircom.net> To: current@freebsd.org Subject: Floating point problems Message-ID: <20021024115918.057A443E65@mx1.FreeBSD.org>
next in thread | raw e-mail | index | archive | help
Hi, There was some discussion about issues with interactions between the floating point context and signal handling in a thread a week or so ago, and a suggestion that someone try and get a simple test that would fail. I was surprised how easy it was: The following program just spins calculating the value of 6.0 / 3.0, and traps SIGINT. If you run it on -current (as of a few hours ago), 99% of the time, hitting ctl-C will cause the program to exit with an error. A 4.5 kernel never causes any problems. I'm pretty sure this is what's causing the stalls and crashes in X. I've taken stack traces of crashes, and from "spinning" processes, and I can spot NaNs on the stack that shouldn't be there, etc. I just thought it might be useful to send this, to firmly take the blame away from the X server, and give someone a way of reproducing the bug. fptest.c: #include <math.h> #include <stdio.h> #include <signal.h> #include <assert.h> int count = 0; void sigint(int sig) { write(2, "INT\n", 4); count++; } int main(int argc, char **argv) { double x = 6.0; double y = 3.0; double d; double err; struct sigaction sa; sa.sa_handler = sigint; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaction(SIGINT, &sa, 0); while (count < 30) { d = x / y; err = 2.0 - d; if (err != 0.0) { fprintf(stderr, "err %f!\n", err); exit(-1); } } } -- Peter Edwards. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021024115918.057A443E65>