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 [EMAIL PROTECTED] with "unsubscribe freebsd-current" in the body of the message