]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/testsuite/gdb.threads/watchthreads.c
Update copyright year range in all GDB files.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.threads / watchthreads.c
index e19fe0759d58f1613f0c02c427b0394644c2d8e8..0333e00c832a7fb0482fbb064c1fccc7b5df986c 100644 (file)
@@ -1,10 +1,10 @@
 /* This testcase is part of GDB, the GNU debugger.
 
-   Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright 2002-2020 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -13,9 +13,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
    This file is copied from schedlock.c.  */
 
 #include <stdlib.h>
 #include <pthread.h>
 
-void *thread_function(void *arg); /* Pointer to function executed by each thread */
+void *thread_function (void *arg); /* Function executed by each thread.  */
 
 #define NUM 5
 
 unsigned int args[NUM+1];
 
-int main() {
+int
+main ()
+{
     int res;
     pthread_t threads[NUM];
     void *thread_result;
     long i;
 
+    /* To keep the test determinative, initialize args first,
+       then start all the threads.  Otherwise, the way watchthreads.exp
+       is written, we have to worry about things like threads[0] getting
+       to 29 hits of args[0] before args[1] gets changed.  */
+
+    for (i = 0; i < NUM; i++)
+      {
+       /* The call to usleep is so that when the watchpoint triggers,
+          the pc is still on the same line.  */
+       args[i] = 1; usleep (1); /* Init value.  */
+      }
+
     for (i = 0; i < NUM; i++)
       {
-       args[i] = 1; /* Init value.  */
-       res = pthread_create(&threads[i],
-                            NULL,
-                            thread_function,
-                            (void *) i);
+       res = pthread_create (&threads[i],
+                             NULL,
+                             thread_function,
+                             (void *) i);
       }
 
     args[i] = 1;
     thread_function ((void *) i);
 
-    exit(EXIT_SUCCESS);
+    exit (EXIT_SUCCESS);
 }
 
-void *thread_function(void *arg) {
+void *
+thread_function (void *arg)
+{
     int my_number =  (long) arg;
     int *myp = (int *) &args[my_number];
 
     /* Don't run forever.  Run just short of it :)  */
     while (*myp > 0)
       {
-       (*myp) ++;  /* Loop increment.  */
+       (*myp) ++; usleep (1);  /* Loop increment.  */
       }
 
-    pthread_exit(NULL);
+    pthread_exit (NULL);
 }