• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * File: exception2.c
3  *
4  *
5  * --------------------------------------------------------------------------
6  *
7  *      Pthreads-win32 - POSIX Threads Library for Win32
8  *      Copyright(C) 1998 John E. Bossom
9  *      Copyright(C) 1999,2005 Pthreads-win32 contributors
10  *
11  *      Contact Email: rpj@callisto.canberra.edu.au
12  *
13  *      The current list of contributors is contained
14  *      in the file CONTRIBUTORS included with the source
15  *      code distribution. The list can also be seen at the
16  *      following World Wide Web location:
17  *      http://sources.redhat.com/pthreads-win32/contributors.html
18  *
19  *      This library is free software; you can redistribute it and/or
20  *      modify it under the terms of the GNU Lesser General Public
21  *      License as published by the Free Software Foundation; either
22  *      version 2 of the License, or (at your option) any later version.
23  *
24  *      This library is distributed in the hope that it will be useful,
25  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
26  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
27  *      Lesser General Public License for more details.
28  *
29  *      You should have received a copy of the GNU Lesser General Public
30  *      License along with this library in the file COPYING.LIB;
31  *      if not, write to the Free Software Foundation, Inc.,
32  *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
33  *
34  * --------------------------------------------------------------------------
35  *
36  * Test Synopsis: Test passing of exceptions out of thread scope.
37  *
38  * Test Method (Validation or Falsification):
39  * -
40  *
41  * Requirements Tested:
42  * -
43  *
44  * Features Tested:
45  * -
46  *
47  * Cases Tested:
48  * -
49  *
50  * Description:
51  * -
52  *
53  * Environment:
54  * -
55  *
56  * Input:
57  * - None.
58  *
59  * Output:
60  * - File name, Line number, and failed expression on failure.
61  * - No output on success.
62  *
63  * Assumptions:
64  * - have working pthread_create, pthread_self, pthread_mutex_lock/unlock
65  *   pthread_testcancel, pthread_cancel, pthread_join
66  *
67  * Pass Criteria:
68  * - Process returns zero exit status.
69  *
70  * Fail Criteria:
71  * - Process returns non-zero exit status.
72  */
73 
74 
75 #if defined(_MSC_VER) || defined(__cplusplus)
76 
77 #if defined(_MSC_VER) && defined(__cplusplus)
78 #include <eh.h>
79 #elif defined(__cplusplus)
80 #include <exception>
81 #endif
82 
83 #ifdef __GNUC__
84 #include <stdlib.h>
85 #endif
86 
87 #include "test.h"
88 
89 /*
90  * Create NUMTHREADS threads in addition to the Main thread.
91  */
92 enum {
93   NUMTHREADS = 1
94 };
95 
96 
97 void *
exceptionedThread(void * arg)98 exceptionedThread(void * arg)
99 {
100   int dummy = 0x1;
101 
102 #if defined(_MSC_VER) && !defined(__cplusplus)
103 
104   RaiseException(dummy, 0, 0, NULL);
105 
106 #elif defined(__cplusplus)
107 
108   throw dummy;
109 
110 #endif
111 
112   return (void *) 100;
113 }
114 
115 int
main(int argc,char argv[])116 main(int argc, char argv[])
117 {
118   int i;
119   pthread_t mt;
120   pthread_t et[NUMTHREADS];
121 
122   if (argc <= 1)
123     {
124       int result;
125 
126       printf("You should see an \"abnormal termination\" message\n");
127       fflush(stdout);
128       result = system("exception2.exe die");
129       exit(0);
130     }
131 
132   assert((mt = pthread_self()).p != NULL);
133 
134   for (i = 0; i < NUMTHREADS; i++)
135     {
136       assert(pthread_create(&et[i], NULL, exceptionedThread, NULL) == 0);
137     }
138 
139   Sleep(1000);
140 
141   /*
142    * Success.
143    */
144   return 0;
145 }
146 
147 #else /* defined(_MSC_VER) || defined(__cplusplus) */
148 
149 #include <stdio.h>
150 
151 int
main()152 main()
153 {
154   fprintf(stderr, "Test N/A for this compiler environment.\n");
155   return 0;
156 }
157 
158 #endif /* defined(_MSC_VER) || defined(__cplusplus) */
159