Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / dyninst / test_thread_5_mutatee.c
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31 #include <assert.h>
32
33 #include "mutatee_util.h"
34 #include "test_thread.h"
35 #include "test12.h"
36
37 /* Externally accessed function prototypes.  These must have globally unique
38  * names.  I suggest following the pattern <testname>_<function>
39  */
40
41 /* Global variables accessed by the mutator.  These must have globally unique
42  * names.
43  */
44
45 volatile int test_thread_5_idle = 0;
46
47 /* Internally used function prototypes.  These should be declared with the
48  * keyword static so they don't interfere with other mutatees in the group.
49  */
50
51 /* Global variables used internally by the mutatee.  These should be declared
52  * with the keyword static so they don't interfere with other mutatees in the
53  * group.
54  */
55
56 /* Function definitions follow */
57
58 void *thread_main8(void *arg)
59 {
60   /*  The mutator will patch in messaging primitives to signal events at mutex creation,
61       deletion, locking and unlocking.  Thus far, we are only considering reporting of events
62       so actual contention is meaningless */
63   Lock_t newmutex;
64   arg = NULL;
65   if (!createLock(&newmutex)) {
66      logerror("%s[%d]:  createLock failed\n", __FILE__, __LINE__);
67      return NULL;
68   }
69   sleep_ms(100);
70   if (!lockLock(&newmutex)) {
71      logerror("%s[%d]:  lockLock failed\n", __FILE__, __LINE__);
72      return NULL;
73   }
74   sleep_ms(100);
75   if (!unlockLock(&newmutex)) {
76      logerror("%s[%d]:  unlockLock failed\n", __FILE__, __LINE__);
77      return NULL;
78   }
79   sleep_ms(100); 
80   if (!destroyLock(&newmutex)) {
81      logerror("%s[%d]:  destroyLock failed\n", __FILE__, __LINE__);
82      return NULL;
83   }
84
85   sleep(1);
86   return NULL;
87 }
88
89 Thread_t test8threads[TEST8_THREADS];
90 void func8_1()
91 {
92   Thread_t *threads = test8threads;
93
94   threads = createThreads(TEST8_THREADS, thread_main8,threads);
95   assert (threads);
96
97   while (test_thread_5_idle == 0) {
98     /* Do nothing */
99   }
100 }
101
102 int test_thread_5_mutatee() {
103   func8_1();
104   return 0; /* Return code is not checked */
105 }