From 741322a01a8d91f2082a2ba6fdb8b867bc227a26 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Fri, 6 Jan 2006 16:53:04 +0000 Subject: The threads demo would display negative prime numbers on MacOS X; this appears to be a MacOS X bug, but we added a workaround to "fix" this (STR #1138) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4740 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- test/threads.cxx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'test/threads.cxx') diff --git a/test/threads.cxx b/test/threads.cxx index 7f9320a4d..b54a882ea 100644 --- a/test/threads.cxx +++ b/test/threads.cxx @@ -61,9 +61,10 @@ void* prime_func(void* p) } // very simple prime number calculator ! - for (; ; n+= step) { + for (;;) { int p; int hn = (int)sqrt((double)n); + for (p=3; p<=hn; p+=2) if ( n%p == 0 ) break; if (p >= hn) { char s[128]; @@ -72,8 +73,16 @@ void* prime_func(void* p) browser->add(s); browser->bottomline(browser->size()); if (n > value->value()) value->value(n); + n += step; Fl::unlock(); Fl::awake((void*) (browser == browser1? p:0)); // Cause the browser to redraw ... + } else { + // This should not be necessary since "n" and "step" a local variables, + // however it appears that at least MacOS X has some threading issues + // that cause semi-random corruption of the (stack) variables. + Fl::lock(); + n += step; + Fl::unlock(); } } return 0; -- cgit v1.2.3