diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/threads.cxx | 11 | ||||
| -rw-r--r-- | test/threads.h | 5 |
2 files changed, 12 insertions, 4 deletions
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; diff --git a/test/threads.h b/test/threads.h index 8d376b147..aa89e7bea 100644 --- a/test/threads.h +++ b/test/threads.h @@ -50,9 +50,8 @@ typedef pthread_t Fl_Thread; -static int fl_create_thread(Fl_Thread& t, void *(*f) (void *), void* p) -{ - return pthread_create((pthread_t*)&t, 0, f, p); +static int fl_create_thread(Fl_Thread& t, void *(*f) (void *), void* p) { + return pthread_create((pthread_t*)&t, &attr, f, p); } # elif defined(WIN32) && !defined(__WATCOMC__) // Use Windows threading... |
